【问题标题】:Unable to de-serialize json string [duplicate]无法反序列化 json 字符串 [重复]
【发布时间】:2018-09-08 13:11:14
【问题描述】:

下面是我的 JSON 结构:

{
  "status": "success",
  "data": {
    "MyValues": [
      [
        "2018-09-06T09:15:00+0530",
        1030,
        1038.75,
        1017.2,
        1030.9,
        542542
      ],
      [
        "2018-09-07T09:15:00+0530",
        1032.7,
        1035.45,
        1015.5,
        1025.35,
        410461
      ]
    ]
  }
}   

我正在使用 Newtonsoft JSON。为了使它成为强类型,我创建了下面的类,考虑到 JSON 结构:

class MyValues
        {
            public DateTime TimeStamp { get; set; }
            public decimal First { get; set; }
            public decimal Second { get; set; }
            public decimal Third { get; set; }
            public decimal Fourth { get; set; }
            public decimal Fifth { get; set; }
        }

  class Data
        {
            public MyValues[] MyValues { get; set; }
        }

  class MyData
        {
            public string  Status { get; set; }

            public Data Data { get; set; }
         }

最后,下面是我写的代码。它从 jd.txt 文件中读取上面的 json 对象并尝试解析它:

using (StreamReader file = File.OpenText(@"jd.txt"))
 {
   Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
    MyData MyData = (MyData)serializer.Deserialize(file, typeof(MyData));
  }

当我运行上面的代码时,我看到 MyData.Data.MyValues 为空。我无法找出问题所在。
请指导我解决问题

【问题讨论】:

标签: c# json json.net


【解决方案1】:

你的模型应该是:

public class Data
{
    public List<List<object>> MyValues { get; set; }
}

public class MyData
{
    public string status { get; set; }
    public Data data { get; set; }
}

然后序列化和访问数据:

using (StreamReader file = System.IO.File.OpenText(@"jd.txt"))
    {
       Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
       MyData MyData = (MyData)serializer.Deserialize(file, typeof(MyData));
       return MyData.data.MyValues[0][0].ToString();
     }

【讨论】:

  • 管理员,我知道这是一个重复的问题。但是,我无法将 JSON 结构映射到 Model。特别是我对 List> MyValues 感到困惑。谢谢@Yanga 的帮助。上帝保佑!
【解决方案2】:

1.)创建一个Mydata对象并加载所有变量

2.)序列化它(如果是web服务输出你可以在浏览器中观察json字符串)

3.)根据json的序列化格式,你可以知道它接受什么样的json作为回报。

4.)在找到 json 后,它期望你可以构造那种 json,以便它可以反序列化它。

5.)例如:

Mydata对象json字符串(我们称之为序列化Mydata)是这样的:

{
      "status":"active",
       "data":{
               "MyValues":[
                            {
                              "Name":"k",
                               "ID":"122"
                            },
                            {
                             "Name":"a",
                             "ID":"123"
                            }
                         ]
              }
 }

那么你的类只希望这种格式的 json 字符串将其转换回 Mydata 对象(我们称之为反序列化)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多