【问题标题】:JSON string not deserializingJSON字符串未反序列化
【发布时间】:2012-10-01 09:45:33
【问题描述】:

由于重复的属性名称 valuevalue_raw,我在反序列化此 JSON 数据时遇到问题。

我尝试使用基于列表的对象来反序列化这些值,但这只会导致最后一个值存储在对象中。除此之外,对象解析正确。

JSON 字符串:

{
    "prtg-version":"9.2.0.2236",
    "treesize":576,
    "values":
        [{
            "datetime":"29/09/2012 09:45:00 - 09:50:00",
            "datetime_raw":41181.3680555556,
            "value":"49 %",
            "value_raw":48.5000,
            "value":"0 %",
            "value_raw":0.0000,
            "coverage":"100 %",
            "coverage_raw":"0000010000"
        }]
}  

请注意 - JSON 字符串是我从 PRTG 得到的,所以不幸的是我必须以这种格式使用它:(

【问题讨论】:

  • 或许this question可以帮到你
  • 你如何定义你的基于列表的对象
  • 这里不确定,“value”和“value_raw”不能被视为重复的属性名称,除非我们缺少信息。你能提供一段你正在做什么/试图做什么的示例代码吗?因为这是有效的 json,所以它应该反序列化就好了。

标签: c# json deserialization prtg


【解决方案1】:

您无法反序列化,因为您提供的字符串不是有效的 JSON。根据 RFC,一个对象内的所有属性名称都应该是唯一的。解决这个问题的唯一合理方法 - 重写该字符串来自的代码部分。

【讨论】:

  • 实际上,RFC 允许这样的事情,但建议不要这样做。 “对象中的名称应该是唯一的。”也就是说,我认为我从未见过 a) 这在实践中使用,b) 处理它的 JSON 库除了给你一个值(随机选择)返回。这可能是 OP 的问题。
【解决方案2】:

你能先序列化吗

            "datetime":"29/09/2012 09:45:00 - 09:50:00",
            "datetime_raw":41181.3680555556,
            "value":"49 %",
            "value_raw":48.5000,
            "value":"0 %",
            "value_raw":0.0000,
            "coverage":"100 %",
            "coverage_raw":"0000010000"

变成一个字符串列表,然后再做进一步处理?

【讨论】:

    【解决方案3】:
    "datetime"    :"29/09/2012 09:45:00 - 09:50:00",
    "datetime_raw":41181.3680555556,
    "value"       :["49 %","0 %"]
    "value_raw"   :[48.5000,0.0000]            
    "coverage"    :"100 %",
    "coverage_raw":"0000010000"
    

    如上所示更改valuevalue_raw

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多