【问题标题】:How to deserialize JSON string having a property with different types [duplicate]如何反序列化具有不同类型属性的JSON字符串[重复]
【发布时间】:2021-02-02 12:32:43
【问题描述】:

我有如下 JSON 响应

{
    "result": "success",
    "totalresults": "100",
    "items": {
        "item": [            
            {
                "id": "5812",                
                "lineitems": {
                    "lineitem": [
                        {
                            "type": "product",                            
                            "status": "Active"
                        }
                    ]
                }
            },
            {
                "id": "5",               
                "lineitems": []
            }
          ]
    }
}

在尝试使用特定类型对其进行反序列化时,由于 lineitems 属性,它会引发异常。 lineitems 是一个空数组,对于另一个项目,它有一个带有数组的属性 lineitem。我无法控制这个 JSON 数据。请建议我如何反序列化它而不会出现任何错误。

使用 lineitems 作为对象可以帮助我反序列化 JSON,但是我最终会在对象字段中有 2 种不同的类型,这对我也无济于事。

【问题讨论】:

  • 您可能需要一个自定义转换器,请参阅this answer 了解如何执行此操作的示例。
  • 请与我们分享相关代码,异常并指出您卡在哪里。
  • @Dev,顺便说一句,你期望什么?您已经谈论了您得到的结果,但没有说明任何有关预期结果的内容。 lineitems 是一个 List<lineitem> 你没问题,或者你希望它是一个单一的对象?在第二种情况下,我将有另一个欺骗目标。
  • @DragandDrop 询问,您将收到!

标签: c# json .net serialization


【解决方案1】:

如果您确定“lineitems”,您可以执行替换策略。从 API 获取 JSON 字符串后,进行基于条件的替换

json = json.Replace("lineitems: []", "lineitems: null");

一旦你这样做了,你的 JSON 就会被标准化。然后就可以进行杀菌消毒了。

【讨论】:

  • 这是一个非常糟糕的主意,就像,非常糟糕。很多事情都会出错。
猜你喜欢
  • 2020-06-07
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多