使用System.Runtime.Serialization.Json反序列化JSON

时间:2012-11-22 05:44:42

标签: c# json deserialization datacontractjsonserializer

我遇到了用C#反序列化一些json的问题。

假设这是我发送的json的片段(重复多次,除了id / name之外别无其他):

[
    {
    "id":0,
    "name":"N/A"
    },
    {
        "id":1,            
        "name":"Annie"            
    },
    {
        "id":2,            
        "name":"Olaf"            
    }    
]

如果命名了顶级,我会做类似

的事情
[DataContract]
public class ChampList
{
    [DataMember(Name = "SOMENAME")]
    public ElophantChamp[] ElophantChamps { get; set; }
}

[DataContract]
public class ElophantChamp
{
    [DataMember(Name = "id")]
    public int ID { get; set; }

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

}

然后通过调用它来反序列化它:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ChampList));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ChampList jsonResults = objResponse as ChampList;

但是如果没有顶级容器对象并且我没有空白的datamember名称,我该怎么办?如果我将DataMember保留为未命名(即将其保留为[DataMember]),我只会得到一个空值,我会指出它无法正确解析它。

不会抛出任何错误,并且sesponse流的填充正是我期望的。

从我能说的搜索和基本推理,我不应该离我需要的地方很远。处理最高级别时,我遇到了一些错误。

1 个答案:

答案 0 :(得分:3)

没有父类ChampList吗?

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ElophantChamp[]));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ElophantChamp[] jsonResults = objResponse as ElophantChamp[];