如何使用NewtonSoft JSON反序列化为此类型的对象?该结构包含属性类型变量,但是使用基于此结构的NewtonSoft,此属性将是另一个类。
以下代码示例:
public class RootProduct
{
public Package Package {get; set;}
}
public class Package
{
//Package has a property in which the class type should be changed in order to deserialize
public Package_id ThisValueIsVariable {get; set;}
}
public class Package_id
{
public string product_name {get; set;}
}
在这个包的数据查询中,有必要发送Package_id,在下面的结构中收到此查询的返回,字段“Package_id”(以JSON形式返回)是在查询中发送的此代码。 / p>
返回JSON:
"Package": {
"Package_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"SecondPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"ThirdPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
更新:
在上面的代码中,只有第一个产品将被反序列化,因为只有一个类名为“package_id”,第二个和第三个JSON项不会使用JsonConvert.Deserialize反序列化,因为SecondPackage_id类不存在连续
答案 0 :(得分:1)
解决方案取决于您是否在运行时之前知道名称。
如果您事先知道可能的名称,可以为Package类中的每个类型创建一个单独的属性,如下所示:
public class Package
{
public Package_id FirstPackage {get; set;}
public Package_id SecondPackage {get; set;}
public Package_id ThridPackage {get; set;}
}
其他属性应重新序列化为null。
如果您在运行时不知道可能的ID,那么您实际上正在接收 一个关键值对。因为每个对象的键是不同的,所以技术上可能是多个(即使在你的情况下它可能只是一个)。使用字典从JSON获取(多个)命名对象
public class RootProduct
{
//No package class needed
public IDictionary<string, Package_id> Package {get; set;}
}
public class Package_id
{
public string product_name {get; set;}
}