Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Metro应用程序-反序列化JSON字符串_C#_Json - Fatal编程技术网

C# Metro应用程序-反序列化JSON字符串

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":"

我想反序列化从Web服务获取的JSON字符串。我的问题是,(Result类型的)反序列化对象类数组中始终有0个项

但是webservice返回正确的字符串。 因此,我认为失败发生在我反序列化字符串/流的方式上

知道是我的错吗

//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。只要对代码稍加修改,就可以很好地工作。非常感谢:-)。顺便说一下:我读过你的书,很好的解释和文章;)