2010-08-29 235 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