【问题标题】:How to deserilize json in C# [duplicate]如何在 C# 中反序列化 json [重复]
【发布时间】:2017-08-04 11:55:47
【问题描述】:

我收到此响应。如何对 JSON 进行反序列化?

[{
    "NoOfRecord":"2",
    "data":[ 
    {
    "name": "Pinky",
    "Id": "8989898",
    "PhoneNumber": "918934",
    "status": "Success",
    },
    {
    "name": "Kajol",
    "Id": "2345678",
    "PhoneNumber": "915566",
    "status": "Fail",
    }
    ]
}]

我试过这样,但是出错了。

我为此创建了 2 个类。

public class JsonResult2
{
    public string NoOfRecord{ get; set; }
    public JsonData Data { get; set; }
}

public class JsonData 
{
   public string name{ get; set; }
   public string Id{ get; set; }
   public string PhoneNumber{ get; set; }
   public string status{ get; set; }
}

当我这样写时,出现错误。

 var JsonData = JsonConvert.DeserializeObject<JsonResult2>(ResponseJson);

我正在使用 Newtonsoft 的库(使用 Newtonsoft.Json;)

如何访问所有nameidphonenumberstatus

我将获得的响应存储在名为 ResponseJson 的字符串中。

错误:无法将 JSON 数组反序列化为“JsonResult2”类型

【问题讨论】:

  • 您能分享一下您遇到的错误是什么吗??
  • 错误:无法将 JSON 数组反序列化为“JsonResult2”类型
  • 将JsonResult2的属性名“Count”改为“NoOfRecord”。此外,反序列化后,您可以访问诸如 - JsonData.JsonData.name 等属性。
  • 完成了仍然面临问题
  • 就用这个页面json2csharp.com

标签: c# asp.net json


【解决方案1】:

首先,您的 JSON 字符串无效。它有两个不应该存在的逗号,如下所示:

[{
    "NoOfRecord":"2",
    "data":[ 
    {
    "name": "Pinky",
    "Id": "8989898",
    "PhoneNumber": "918934",
    "status": "Success", <-- This comma shouldn't be there
    },
    {
    "name": "Kajol",
    "Id": "2345678",
    "PhoneNumber": "915566",
    "status": "Fail", <-- This comma shouldn't be there
    }
    ]
}]

删除这些逗号后,您的 JSON 就有效了。下面是它的外观:

[{
    "NoOfRecord":"2",
    "data":[ 
    {
    "name": "Pinky",
    "Id": "8989898",
    "PhoneNumber": "918934",
    "status": "Success"
    },
    {
    "name": "Kajol",
    "Id": "2345678",
    "PhoneNumber": "915566",
    "status": "Fail"
    }
    ]
}]

现在最外面的括号[] 表示您正在接收一个数组,而不是对象。所以你的反序列化语法应该是:

var JsonData = JsonConvert.DeserializeObject<List<JsonResult2>>(ResponseJson);

然后您需要确保 JSON 中的属性与您的实体的属性相匹配。另请注意 JSON 中的两个 [] 方括号与 data。这意味着您期待一个数组,而不是对象。这意味着Data 应该是List&lt;JsonData&gt; 而不是JsonData。所以你需要更新JsonResult2如下:

public class JsonResult2
{
    public string NoOfRecord { get; set; }
    public List<JsonData> Data { get; set; }
}

另外,如果您确定NoOfRecord 是一个数字,您可能需要将JsonResult2 中的NoOfRecord 类型更改为int

【讨论】:

  • @Downvoter:想解释一下我的回答有什么问题吗?
  • 我不是反对者。我的猜测是因为您提供了错误的答案。 Data 应该是基于 OP 中的 JSON 的 JsonData 的集合,即 public IList&lt;JsonData&gt; data { get; set; }
  • @Nkosi 谢谢,我错过了。
  • 您还应该让 OP 知道他们正在反序列化为错误的类型。一切都包装在一个数组中,因此他们需要询问JsonResult2[],因此有关无法将 JSON 数组反序列化为类型“JsonResult2”的错误消息
  • @Nkosi 令人惊讶的是我错过了多少细节。我什至没有注意到他们的 JSON 是无效的。在右括号} 之前有一堆逗号,。我会更新答案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2018-02-11
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多