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

本文关键字:反序列化 响应 JSON 对象 列表 | 更新日期: 2023-09-27 17:59:43

我有一个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"。它只填充了两个字段(状态和消息)。响应JSON是:

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

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

对象Person是:

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; }
}

我的错误在哪里?

我们能帮我吗?

调节

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

您的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);