【问题标题】:C# error while deserializing JSON反序列化 JSON 时出现 C# 错误
【发布时间】:2017-04-01 17:04:32
【问题描述】:

我正在使用 json.net 反序列化 WebApi 服务中传入的 json。

var lines = JsonConvert.DeserializeObject<RootObject>(json);

在阅读了许多其他类似的答案后,它仍然抛出这个错误:

The best overloaded method match for  'Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(string)' has some invalid arguments

在 Postman 中用于 post 的输入 json:

{ "data": [
{"zipcode":"56033","line1":"610 4TH ST","city":"FROST","state":"MN","cid":"1770"},
{"zipcode":"56033","line1":"45375 30TH ST","city":"FROST","state":"MN","cid":"1771"},
{"zipcode":"56033","line1":"115 4TH ST","city":"FROST","state":"MN","cid":"1772"}
]}

poco 类是使用:http://json2csharp.com 创建的。

  public class Datum
  {
    public string zipcode { get; set; }
    public string line1 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string cid { get; set; }
  }

  public class RootObject
  {
    public List<Datum> data { get; set; }
  }

这是我在调试 api 时看到的:

{{
  "data": [
    {
      "zipcode": "56032-0056",
      "line1": "208 MAIN BOX 56",
      "city": "FREEBORN",
      "state": "MN",
      "cid": "1732"
    },
    {
      "zipcode": "56033",
      "line1": "610 4TH ST",
      "city": "FROST",
      "state": "MN",
      "cid": "1770"
    },
    {
      "zipcode": "56033",
      "line1": "45375 30TH ST",
      "city": "FROST",
      "state": "MN",
      "cid": "1771"
    },
    {
      "zipcode": "56033",
      "line1": "115 4TH ST",
      "city": "FROST",
      "state": "MN",
      "cid": "1772"
    },
    {
      "zipcode": "56033",
      "line1": "E 4TH ST",
      "city": "FROST",
      "state": "MN",
      "cid": "1773"
    }
  ]
}}

不确定 webapi 为什么要添加一组额外的花括号或如何防止它们。

有人知道我错过了什么吗?

【问题讨论】:

  • @GillBates 抱歉,4 月 1 日的习惯。 json 可能是 OP 写的“输入 json”
  • @Sentry 我明白了.. 变量json 是什么,你没有在代码中显示它。
  • @Sentry 哦,你甚至都不是 OP,哈哈。
  • 具体来说,变量(或成员)json是如何声明的?也许它实际上并没有被声明为一个字符串。
  • 就是上面介绍的Input json。

标签: c# arrays json.net


【解决方案1】:

如果你的 json 变量是一个字符串,它会起作用。这是.NET Fiddle 的演示。

【讨论】:

  • json变量是从api进来的:public List PostAddressesByLine1Batch(string key, string product, [FromBody]动态数据)
  • 好的,@kman 给出了关于变量是字符串的建议。当前参数设置为动态或数据通过 api 为空。所以添加 var json = data.ToString();然后 var lines = JsonConvert.DeserializeObject(json);正确反序列化。
  • 我的错误是尝试将动态直接处理为反序列化。您需要强制它串起来并且错误停止发生。 stackoverflow.com/questions/7827407/…
  • 我也试图直接去实现动态。刚刚将 .ToString() 应用于动态变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多