2010-08-29 157 views
4

我有以下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方法或应手动反序列化?

回答

9

编辑:好的,忽略以前的答案。问题在于你的数组(引用和艺术)包含对象,其中又包含包含相关数据。基本上你有一层包装太多。例如,该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>。这有帮助吗?

+0

Jon Skeet,谢谢你的回复。 我得到和你一样的结果。 的问题是,对我来说... Stream对象属性是null或0 是 item.References [0]。键入== NULL 等等... 这是否没有发生在你身上? – lboregard 2010-08-29 20:00:07

+0

@Iboregard:啊,对不起 - 我以为你的'List '值为空。正在调查... – 2010-08-29 20:11:08

+0

明白了......现在完美地完成了!非常感谢 ! – lboregard 2010-08-29 21:24:48