【问题标题】:Why is JsonConvert throwing exception when deserializing to a dictionary为什么在反序列化到字典时 JsonConvert 抛出异常
【发布时间】:2018-12-31 17:07:10
【问题描述】:

我在将 JSON 字符串序列化为键/值字典时遇到问题。代码如下:

var parameters = "{\"id\":123}";
JsonConvert.DeserializeObject<Dictionary<string, string>>(parameters);

这个例子看起来很完美,给了我 {[id,123]}。

现在。当我将数字更改为“070809”之类的数字时,我突然收到一个异常:“Newtonsoft.Json.JsonReaderException: Input string '070809' is not a valid number. Path 'id', line 1, position 12.- --> System.FormatException: 附加的不可解析字符在字符串的末尾。"

var parameters = "{\"id\":070809}";
JsonConvert.DeserializeObject<Dictionary<string, string>>(parameters);

有什么建议吗?

【问题讨论】:

  • 感谢它不能解决您的问题,但我发现 this issue 表明这是设计使然。
  • 谢谢@john。前导零似乎不是问题,因为 '010203' 作为值也可以。
  • 有些东西带有前导零......'170809'确实有效。没有解释为什么“010203”正在工作

标签: c# json serialization json.net jsonconvert


【解决方案1】:

您的第二个示例不是有效的 JSON。回想一下 JSON 基于 JavaScript,在该语言中,任何以 0 开头的数字文字都被解释为八进制数。有效的八进制数字是 0-7,所以如果字面量包含 8 或 9,那么它不能被解析并且会引发错误。 ('010203' 有效,因为它是有效的八进制文字,但 '070809' 不是)

【讨论】:

  • 好吧……这解释了很多。但现在的问题。如何修复:D 我不希望当有人不小心输入这样的 id 时,这段代码被炸毁。
  • 问题在于输入,而不是反序列化。您需要做的就是确保首先为您提供有效的 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多