gpt4 book ai didi

c# - 如何反序列化 Json 对象 - C#

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:28 25 4
gpt4 key购买 nike

Web 服务返回 JSON 对象:

JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}"

我试图通过这样做反序列化:

  1. 定义对象

    public class RootResponseClass
    {
    public ResponseParametersClass[] d { get; set; }
    }

    public class ResponseParametersClass
    {
    public string sname { get; set; }
    public string region { get; set; }
    public string name { get; set; }
    }
  2. 编写反序列化方法

     JavaScriptSerializer ser2 = new JavaScriptSerializer();

    RootResponseClass obj = new RootResponseClass();

    obj = ser2.Deserialize<RootResponseClass>(JsonString);

但它给出了错误“无法将类型为‘System.String’的对象转换为类型为‘NAS.Helpers.ResponseParametersClass[]”,那么我该怎么做呢!

解决方案

 public class RootResponseClass
{
public string d { get; set; }
}

对于反序列化方法:

JavaScriptSerializer ser2 = new JavaScriptSerializer();
RootResponseClass obj = new RootResponseClass();
obj = ser2.Deserialize<RootResponseClass>(JsonString);

List<ResponseParametersClass> obj2 = new List<ResponseParametersClass>();
obj2 = ser2.Deserialize<List<ResponseParametersClass>>(obj.d.ToString());

最佳答案

您可以使用包 using Newtonsoft.Json; 反序列化 JSON

例子

JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}";

var foo = JsonConvert.DeserializeObject<RootResponseClass>(JsonString);

foo 是您的反序列化对象。

编辑

作为额外信息,为什么初始方法不起作用是因为您的数组以引号开头,因此它被识别为字符串。在 "{"d": 之后应该只是 [] 而不是 "[]"

感谢 Dnomyar96 指出了这一点。

关于c# - 如何反序列化 Json 对象 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52738931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com