JSON.net反序列化不同对象的列表

时间:2016-02-11 16:30:02

标签: c# json json.net

如何反序列化USON JSON.net的不同对象列表?

string myJson = "[{action: 'a1', target: 4},{action: 'a2', targets: [1,2,3], {action:'a3', text:'targets altered'}}]";

此示例显示了3个不同对象的列表。 如果我反序列化为基本对象,我无法访问任何成员(因为基础对象类没有它们)。

我已经查看了http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm,但我不明白它是否可以帮助我。

2 个答案:

答案 0 :(得分:0)

使用dynamic类型。 您可以像访问属性一样访问元素。如果属性不存在,dynamic类型将返回null而不是抛出异常

dynamic actions = JsonConvert.DeserializeObject(myJson);
foreach (var action in actions)
{
    var name = action.action.ToString();
    var target = action.target.ToString();
    var text = action.text.ToString();
    if (target == null)
    {
         dynamic targets = action.targets;
    }
}

答案 1 :(得分:0)

使用您发布的方法,您的json应该包含额外的信息以指示它是什么类型,这意味着您需要修改json的序列化源,并确保您使用相同的类,命名空间作为源序列

或者,使用Object或dynamic作为目标类型,并在以后使用时将其转换可能更容易。