如何在列表对象中反序列化响应JSON?

时间:2014-04-23 15:09:29

标签: c# json httpresponse

我有一个C#应用程序,它发送一个http请求并从WebServer收到响应。

这是代码,它找到了:

    String url = "http://myurl";
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.Method = "GET";

    using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
    {
    log.Info(httpResponse);
    using (var reader = new StreamReader(httpResponse.GetResponseStream()))
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        var objText = reader.ReadToEnd();
        ResponseJSON myojb = (ResponseJSON)js.Deserialize(objText, typeof(ResponseJSON));

    }

}

objText包含该响应

"{"status":1,
    "message":"Ok",
    "people":[
        {
            "fiscalCode":"ASSISTITO2",
            "name":"Marco",
            "surname":"Puzzolante",
            "sex":"M",
            "bornDate":null,
            "cityCode":null
        },
        {"fiscalCode":"PLMLCU",
            "name":"Luca",
            "surname":"Palumbo",
            "sex":"M",
            "bornDate":"1983-04-22T00:00:00",
            "cityCode":"FO"
        }
    ]
}"

现在我有了这个对象“ResponseJSON”。它填充了两个字段(状态和消息)。 ResponseJSON是:

public class ResponseJSON
{
   public int status { set; get; }
   public String message { set; get; }
   public List<Person> person { set;  get; }
}

此对象没有填充人员列表。

对象人是:

public class Person
{
   public String fiscalCode { set; get; }
   public String name { set; get; }
   public String surname { set; get; }
   public String sex { set; get; }
   public String bornDate { set; get; }
   public String cityCode { set; get; }
   public String provinceCode { set; get; }
   public String username { set; get; }
   public String bloodGroup { set; get; }
}

我的错误在哪里?

我们可以帮助我吗?

Reguards

1 个答案:

答案 0 :(得分:4)

您的ResponseJSON课程与您的JSON不符。

person属性更改为people以反映JSON。

public class ResponseJSON
{
   public int Status { set; get; }
   public String Message { set; get; }
   public List<Person> People { set;  get; }
}

JavaScriptSerializer将反序列化不区分大小写,因此如果您的JSON是camelCase,则可以PascalCase您的属性。

还有Deserialize的通用重载:

var myojb = js.Deserialize<ResponseJSON>(objText);