2013-03-15 94 views
1

我是從,看起來像這樣的HTTP請求接收一個JSON字符串返回:將JSON字符串反序列化爲C#中的嵌套類?

[ 
    { 
    "size":590, 
    "location":"California", 
    "report":{ 
    "Bob":[ 
     null, 
     "12.0.250.0", 
     "20130228" 
    ], 
    "Mary":[ 
     null, 
     "2013-02-28.01", 
     "20130228" 
    ], 
    "John":[ 
     null, 
     "12.00", 
     "59123805" 
    ] 
    } 
}, 
{ 
    "size":12348, 
    "location":"Florida", 
    "report":{ 
    "Misty":[ 
     null, 
     "65492.592", 
     "89216753" 
    ], 
    "Billy":[ 
     null, 
     "789208.w9", 
     "65320880" 
    ], 
    "John":[ 
     null, 
     "89.8056", 
     "75920889" 
    ] 
    } 
} 
] 

,我試圖反序列化到類的結構如下所示:

[DataContract] 
public class DeserializedObject 
{ 
    [DataMember(Name = "size")] 
    public UInt64 Size { get; set; } 

    [DataMember(Name = "location")] 
    public string Location { get; set; } 

    [DataMember(Name = "report")] 
    public Dictionary<string, ReportData> Report { get; set; } 
} 

[CollectionDataContract] 
public class ReportData : List<object> 
{ 
    public string a 
    { 
     get { return (string)this[0]; } 
     set { this[0] = (string)value; } 
    } 

    public string b 
    { 
     get { return (string)this[1]; } 
     set { this[1] = (string)value; } 
    } 

    public string c 
    { 
     get { return (string)this[2]; } 
     set { this[2] = (string)value; } 
    } 
} 

當我儘管試圖反序列化它,但報告總是空的。

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<DeserializedObject>)); 
List<DeserializedObject> list = serializer.ReadObject(stream) as List<DeserializedObject>; 

什麼是反序列化JSON響應的「報告」部分的正確方法?

+0

它是空的Dictionary對象或純空? – Vlad 2013-03-15 22:05:27

+0

這是一個空的Dictionary對象。 – 2013-03-15 22:14:57

回答

0

問題是您的報告類未正確設置。 json.NET正在尋找關鍵字a,b和c。除此之外,字典中的值是一個字符串數組,而不是一個對象。 ReportData一個對象。這種不匹配是導致錯誤的原因。

我認爲改爲報告應該只是從項目中刪除<string, string[]>ReportData類型的字典。如果我要這樣做,我會使用下面的類(DataContract的東西實際上並不是必須的);

public class DeserializedObject 
    { 
     public UInt64 size { get; set; } 

     public string location { get; set; } 

     public Dictionary<string, string[]> report { get; set; } 
    } 
+0

我試着爲報告使用Dictionary ,它仍然返回一個空的(非空)Dictionary對象。我也試過使用字典<字符串,列表>,並沒有工作。 – 2013-03-18 15:46:06

0

我能夠使用Json.NET成功地反序列化JSON字符串。我用反序列化的串類看起來是這樣的:

[DataContract] 
public class DeserializedObject 
{ 
    [DataMember(Name = "size")] 
    public UInt64 Size { get; set; } 

    [DataMember(Name = "location")] 
    public string Location { get; set; } 

    [DataMember(Name = "report")] 
    public Dictionary<string, string[]> Report { get; set; } 
} 

,並用於反序列化對象的代碼如下所示:

StreamReader reader = new StreamReader(stream); 
List<DeserializedObject> instance = JsonConvert.DeserializeObject<List<DeserializedObject>>(reader.ReadToEnd()); 
相關問題