【问题标题】:Can't deserialize JSON to Object [duplicate]无法将 JSON 反序列化为对象 [重复]
【发布时间】:2020-04-21 01:31:58
【问题描述】:

我正在我的程序中进行一些测试,我想将 APIGatewayProxyResponse 转换为一个对象来访问它的值。

所以我的 APIGatewayProxyResponse.Body(它是一个字符串)的示例如下:

"[{"date": "2020-03-06", "value": 35},{"date": "2020-03-09", "value": 233}]"

起初我想把它变成字典,但我意识到这可能是不可能的,因为字典具有唯一的键值,而这里我有一个不唯一的“日期”和“值”属性。

var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(APIGatewayProxyResponse.Body);

有一个错误,这证明了我的担心:

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“System.Collections.Generic.Dictionary`2[System.String,System.String]”,因为该类型需要 JSON 对象(例如{"name":"value"}) 正确反序列化。

所以我做了一个 ResponseObject 来达到同样的效果

public class ResponseObject
    {
      public string date { get; set; }
      public double value { get; set; }
    }

var dic = JsonConvert.DeserializeObject(APIGatewayProxyResponse.Body,typeof(ResponseObject));

但是有同样的错误!我不明白,浏览器可以查看响应并识别出它是 JSON 格式,那么为什么在 ASP.NET 中不一样呢?

【问题讨论】:

  • 看看你的JSON,最外层的token类型是什么?对象还是数组?
  • List&lt;Dictionary&lt;string, object&gt;&gt; 应该可以工作,因为您在每个数组项中都有唯一的键。但是强类型对象的集合是最干净的。

标签: c# asp.net json json-deserialization


【解决方案1】:

因为你的 Json 是一个数组,所以你可以用 IEnumerable 类型反序列化。
试试这个:

var dic = JsonConvert.DeserializeObject<IEnumerable<ResponseObject>>(APIGatewayProxyResponse.Body);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    相关资源
    最近更新 更多