【问题标题】:Unable to Deserialize JSON into Dictionary无法将 JSON 反序列化为字典
【发布时间】:2019-02-08 00:25:22
【问题描述】:

我正在进行一个返回 JSON 的 API 调用(到一个名为 jsonString 的变量中)。对 JSON 数据执行 Console.WriteLine(jsonString) 可以揭示这一点:

{"contentType":null,"serializerSettings":null,"statusCode":null,"value":"{\"contentType\":null,\"serializerSettings\":null,\"statusCode\":空,\"值\":{\"10\":\"ALABAMA\",\"11\":\"ALASKA\",\"12\":\"ARIZONA\",\"13\" :\"阿肯色州\",\"14\":\"加州\",\"15\":\"科罗拉多州\",\"16\":\"康涅狄格州\",\"17\":\ "特拉华州\",\"18\":\"佛罗里达州\",\"19\":\"乔治亚州\",\"20\":\"夏威夷\",\"21\":\"爱达荷州\",\"22\":\"伊利诺伊州\",\"23\":\"印第安纳州\",\"24\":\"爱荷华州\",\"25\":\"堪萨斯州\" ,\"26\":\"肯塔基州\",\"27\":\"路易斯安那州\",\"28\":\"缅因州\",\"29\":\"马里兰州\",\ "30\":\"马萨诸塞州\",\"31\":\"密歇根\",\"32\":\"明尼苏达\",\"33\":\"密西西比州\",\"34 \":\"密苏里\",\"35\":\"蒙大拿\",\"36\":\"内布拉斯加州\",\"37\":\"内华达\",\"38\" :\"新罕布什尔\",\"39\":\"新泽西\",\"40\":\"新墨西哥\",\"41\":\"纽约\",\"42 \":\"北卡罗来纳州\",\"43\":\"北达科他州\",\"44\":\"俄亥俄州\",\"45\":\"俄克拉荷马州\",\"46 \":\"俄勒冈\",\"47\":\"宾夕法尼亚\",\"48\":\"罗德岛\",\"49\":\"南卡罗来纳\",\"50 \":\"南达科他州\",\ "51\":\"田纳西州\",\"52\":\"德州\",\"53\":\"犹他州\",\"54\":\"佛蒙特州\",\"55 \":\"维吉尼亚\",\"56\":\"华盛顿\",\"57\":\"西维吉尼亚\",\"58\":\"威斯康星\",\"59\ ":\"怀俄明州\"}}"}

我正在尝试将其反序列化为如下所示的类:

public class LookupValuesResponse
{
    [JsonProperty("value")]
    public Dictionary<int, string> LookupValues;

    [JsonProperty("statusCode")]
    public string Status;

}

我试过了:

LookupValuesResponse lookupresponse = JsonConvert.DeserializeObject<LookupValuesResponse>(jsonString);

但是,我收到无法反序列化 JSON 的错误:

System.ArgumentException : 无法从 System.String 转换或转换为 System.Collections.Generic.Dictionary`2[System.Int32,System.String]。

【问题讨论】:

  • JSON 中的invalidData 在哪里?
  • 我刚刚尝试过,没有invalidDataErrorDesc 并且成功了。
  • 如果它在没有invalidData 的情况下工作,那么它可能是原因。你能告诉我们InvalidData 类型吗?您是否在混淆 JSON 中的某些内容?
  • 我删除了 invalidData 和 ErrorDesc 并且没有任何变化。我还需要添加contentTypeserializerSettings 吗?我需要将其设为Dictionary&lt;string, string&gt;吗?
  • @NickHeidke 是的。将其更改为Dictionary&lt;string, string&gt;

标签: c# json


【解决方案1】:

我需要更改被调用 API 返回结果的方式。以前我有:

return Ok(Json(response.Content.ReadAsStringAsync().Result));

我需要:

return Ok(JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result));

【讨论】:

  • 很高兴你解决了它。顺便说一句,你真的应该使用asyncawait
猜你喜欢
  • 1970-01-01
  • 2018-09-21
  • 2017-10-19
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多