json到c#deserilization

时间:2015-10-08 10:56:50

标签: c# php json

我想将这个JSON返回从php文件转换为c#。但是,作为新手不知道如何,请帮助。

{"response": [
    {"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
    {"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
    {"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"}
]}

上面的JSON是从我的PHP文件返回的。

WebRequest request = WebRequest.Create("http://localhost/abh/returntest.php");
WebResponse response = await request.GetResponseAsync();
List<Response>  json ;
using (var stream = new StreamReader(response.GetResponseStream()))
{
    json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());
}
foreach (var item in json)
{
    Console.WriteLine("id={0},latitude={1},longitude={2}",item.user_id,item.crtloc_lat,item.crtloc_lng);
}            

我正在使用的课程是:

public class Response
{
    public string user_id { get; set; }
    public string crtloc_lat { get; set; }
    public string crtloc_lng { get; set; }
}

public class RootObject
{
    public List<Response> response { get; set; }
}

我收到此错误:

  

无法反序列化当前的JSON对象(例如{“name”:“value”})   进入类型'System.Collections.Generic.List`1 [afterall.Response]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。

3 个答案:

答案 0 :(得分:3)

根据您的示例JSON,以下行是错误的。

json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());

尝试将其更改为:

json = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());

修改

WebRequest request = WebRequest.Create("http://localhost/abh/returntest.php");
WebResponse response = await request.GetResponseAsync();
RootObject json;
using (var stream = new StreamReader(response.GetResponseStream()))
{
    json = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());
}
foreach (var item in json)
{
    Console.WriteLine("id={0},latitude={1},longitude={2}",item.user_id,item.crtloc_lat,item.crtloc_lng);
}   

答案 1 :(得分:0)

重写以下行:

json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());

作为

json = JsonConvert.DeserializeObject<Response>(stream.ReadToEnd());

答案 2 :(得分:0)

来自帖子评论中的testlink。你的回答不是:

{"response": [
    {"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
    {"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
    {"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"}
]}

当你发帖而不是:

connected{"response": [
         {"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
          {"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
          {"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"
          }]
    }

这与您的示例代码不对应。

删除
  

已连接{}

为连接的对象包装或返回正确的json(无论连接是什么)。如果删除包装,它应该像@Dietz发布的那样工作。