C# Metro应用程序-反序列化JSON字符串
我想反序列化从Web服务获取的JSON字符串。我的问题是,(Result类型的)反序列化对象类数组中始终有0个项 但是webservice返回正确的字符串。 因此,我认为失败发生在我反序列化字符串/流的方式上 知道是我的错吗C# Metro应用程序-反序列化JSON字符串,c#,json,C#,Json,我想反序列化从Web服务获取的JSON字符串。我的问题是,(Result类型的)反序列化对象类数组中始终有0个项 但是webservice返回正确的字符串。 因此,我认为失败发生在我反序列化字符串/流的方式上 知道是我的错吗 //JSON result string: {"Results": [{"Result":{ "Name":"Rechnung2", "Date1":"2012-10-05", "Item1":"50", "Item2":"
//JSON result string:
{"Results":
[{"Result":{
"Name":"Rechnung2",
"Date1":"2012-10-05",
"Item1":"50",
"Item2":"10",
"CompanyName":"Contoso",
"Description":"My description"}}]
}
[DataContract]
public class Result
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Date1 { get; set; }
[DataMember]
public string Item1 { get; set; }
[DataMember]
public string Item2 { get; set; }
[DataMember]
public string CompanyName { get; set; }
[DataMember]
public string Description { get; set; }
}
public async void GetjsonStream()
{
HttpClient client = new HttpClient();
string url = "http://localhost/test/api.php?format=json&key=12345";
HttpResponseMessage response = await client.GetAsync(url);
//ReadAsStringAsync() works fine, so I think ReadAsStreamAsync() works also fine
var str = await response.Content.ReadAsStreamAsync();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Result[]));
//Result has always 0 items
Result[] res = (Result[])ser.ReadObject(str);
}
我自己没有使用过
DataContractJsonSerializer
,因此这可能不是最好的方法——但我怀疑问题在于JSON表示“包含结果集合的对象”,而不是“结果集合”
除现有代码外,请尝试以下操作:
[DataContract]
public class ResultCollection
{
[DataMember]
public Result[] Results { get; set; }
}
...
var ser = new DataContractJsonSerializer(typeof(ResultCollection));
var collection = (ResultCollection)ser.ReadObject(str);
var results = collection.Results;
如果有帮助的话,您也可以将结果的类型
更改为列表
(我刚刚尝试了上面的代码,它给了我正确的结果,所以看起来这至少是正确的…谢谢Jon。只要对代码稍加修改,就可以很好地工作。非常感谢:-)。顺便说一下:我读过你的书,很好的解释和文章;)