我遇到了用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流的填充正是我期望的。
从我能说的搜索和基本推理,我不应该离我需要的地方很远。处理最高级别时,我遇到了一些错误。
答案 0 :(得分:3)
没有父类ChampList吗?
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ElophantChamp[]));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ElophantChamp[] jsonResults = objResponse as ElophantChamp[];