如何反序列化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,但我不明白它是否可以帮助我。
答案 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作为目标类型,并在以后使用时将其转换可能更容易。