嵌套JSON C#对象反序列化
问题描述:
我有以下JSON字符串(jsonString)嵌套JSON C#对象反序列化
[
{
"name":"Fruits",
"references":[
{"stream":{"type":"reference","size":"original",id":"1"}},
],
"arts":[
{"stream":{"type":"art","size":"original","id":"4"}},
{"stream":{"type":"art","size":"medium","id":"9"}},
]
}
]
和下面的C#对象
class Item
{
public string Name { get; set; }
public List<Stream> References { get; set; }
public List<Stream> Arts { get; set; }
public Item()
{
}
}
class Stream
{
public string Type { get; set; }
public string Size { get; set; }
public string Id { get; set; }
public Stream()
{
}
}
和下面的代码
Item item = JsonConvert.DeserializeObject<Item>(jsonString);
当我运行代码,它会创建正确数量的引用和艺术,但每个流都有空值(type = null,size = null)。
是否有可能做到这json.net deserializeobject方法或应手动反序列化?
答
编辑:好的,忽略以前的答案。问题在于你的数组(引用和艺术)包含对象,其中又包含包含相关数据。基本上你有一层包装太多。例如,该JSON正常工作:
[
{
"name":"Fruits",
"references":[
{"Type":"reference","Size":"original","Id":"1"},
],
"arts":[
{"Type":"art","Size":"original","id":"4"},
{"type":"art","size":"medium","id":"9"},
]
}
]
如果你不能改变的JSON,您可能需要引入一个新的包装类型转换成你的对象模型:
public class StreamWrapper
{
public Stream Stream { get; set; }
}
然后让你Item
类有List<StreamWrapper>
变量而不是List<Stream>
。这有帮助吗?
Jon Skeet,谢谢你的回复。 我得到和你一样的结果。 的问题是,对我来说... Stream对象属性是null或0 是 item.References [0]。键入== NULL 等等... 这是否没有发生在你身上? – lboregard 2010-08-29 20:00:07
@Iboregard:啊,对不起 - 我以为你的'List'值为空。正在调查... –
2010-08-29 20:11:08
明白了......现在完美地完成了!非常感谢 ! – lboregard 2010-08-29 21:24:48