2017-03-16 105 views
-1

如何使用NewtonSoft JSON反序列化为此类型的对象?该结构包含属性类型变量,但基于此结构使用NewtonSoft时,此属性将是另一个类。如何使用NewtonSoft Json反序列化具有变量类型属性的类?

下面的代码示例:

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)是在查询中发送的这段代码。

返回的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" 
     } 
} 

UPDATE:

在上面的代码只有第一产品将被反序列化,因为只有一个类具有名称“的package_id”,并且第二而第三个JSON项目不会反序列化使用JsonConvert.Deserialize,因为SecondPackage_id类不存在连续。

+0

获得(多个)命名的对象,您可以修改您的代码示例,以显示你的意思是什么“包在其中的类类型应更改的属性” – Waaghals

+0

@Waaghals此消息意味着返回的JSON中的字段“package_id”不是固定的名称,即字段类型不是固定字段,但所有变体都包含相同的属性。该名称是一个包ID,JSON标签是一个包的ID,如果我通过列表查询,该ID带有另一个“名称”,但它是同一个类。我需要找到一种能够使这种动态变化的方法,以便Newtonsoft理解反序列化的内容。 –

回答

1

解决方案取决于您是否知道运行时的名称。

当你知道你在动手之前可以在包装类中创建为每种类型的一个单独的属性如下可能的名字:

public class Package 
{ 
    public Package_id FirstPackage {get; set;} 
    public Package_id SecondPackage {get; set;} 
    public Package_id ThridPackage {get; set;} 
} 

其它性能应重新序列化空。

当您在运行时不知道可能的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;} 
} 
+0

我不知道预期值是什么......它们是随机的 –

+0

完美!谢谢! –

相关问题