Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NewtonSoft Json反序列化到具有变量类型属性的类?_C#_Json_Serialization_Json.net - Fatal编程技术网

C# 如何使用NewtonSoft Json反序列化到具有变量类型属性的类?

C# 如何使用NewtonSoft Json反序列化到具有变量类型属性的类?,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,如何使用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 o

如何使用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;}
}
在这个包的数据查询中,有必要发送包_id,该查询的返回按如下结构接收,字段“package_id”(返回JSON)就是查询中发送的代码

返回的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进行反序列化。反序列化是因为第二个Package_id类不连续存在。

解决方案取决于您在运行前是否知道名称

当您事先知道可能的名称后,可以为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;}
}
公共类RootProduct
{
//不需要包类
公共IDictionary包{get;set;}
}
公共类包\u id
{
公共字符串产品名称{get;set;}
}

您是否可以修改代码示例以显示“Package有一个属性,其中类类型应该更改”的含义@Waaghals此消息表示返回的JSON中的字段“Package_id”不是固定名称,也就是说,字段类型不是固定字段,但所有变体都包含相同的属性。该名称是一个包ID,JSON标记是一个包的ID,在我通过列表查询时,该ID附带另一个“名称”,但它是同一个类。我需要找到一种方法使其动态化,以便Newtonsoft了解什么是反序列化的。我不知道预期值是什么。。。他们是随机的完美!谢谢你!