【问题标题】:How to handle JSON Response that sometimes returns an array and sometimes an Object in C# [duplicate]如何在 C# 中处理有时返回数组、有时返回对象的 JSON 响应 [重复]
【发布时间】:2019-05-10 02:57:48
【问题描述】:

我有一个 JSON 响应,当有超过 1 个元素时有时会返回一个数组,而当只有一个元素时返回一个对象。

类似这样的东西:-

"JLLBrokerAllocations": {
          "JLLBrokerAllocation": [
            {
              "AllocPercent": 50,
              "Amount": 4,
              "Email": "",
              "EmpId": 214309,
              "EmpLoginId": "Carlin.Power",
              "EmpName": "Power, Carlin",
              "Id": 1147842,
              "LeadBroker": true,
              "MarketId": "AM0001",
              "Markets": "",
              "OpUnitId": 250050,
              "OpUnits": ""
            },
            {
              "AllocPercent": 50,
              "Amount": 4,
              "Email": "",
              "EmpId": 999111,
              "EmpLoginId": "Sai.Abhiram",
              "EmpName": "Abhiram, Sai",
              "Id": 1147843,
              "LeadBroker": true,
              "MarketId": "AM2900",
              "Markets": "",
              "OpUnitId": 200028,
              "OpUnits": ""
            }
          ]
        },

有时像这样:-

"JLLBrokerAllocations": {
          "JLLBrokerAllocation": 
            {
              "AllocPercent": 50,
              "Amount": 4,
              "Email": "",
              "EmpId": 214309,
              "EmpLoginId": "Carlin.Power",
              "EmpName": "Power, Carlin",
              "Id": 1147842,
              "LeadBroker": true,
              "MarketId": "AM0001",
              "Markets": "",
              "OpUnitId": 250050,
              "OpUnits": ""
            }
}

问题是当我在 C# 中反序列化对象时,我收到一条错误消息“Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List1[JLL.BTP.DealioService.Models.Dealio.DealAllocation]”,因为该类型需要 JSON 数组(例如 [1 ,2,3]) 正确反序列化。`"

如何克服这个问题。我想要一个响应类,并且想要反序列化响应类的 JSON 响应。

任何建议将不胜感激!

【问题讨论】:

标签: c# json


【解决方案1】:

我不确定您使用的是哪个 Json 解析器,但如果您可以使用“Newtonsoft.Json”解析器,我想也许可以尝试类似

JObject payload = JObject.Parse(payload);

var result = payload["JLLBrokerAllocations"]["JLLBrokerAllocation"].Children().ToList();

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2022-01-04
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2020-10-31
    • 2022-01-19
    • 2022-01-01
    • 2016-09-15
    相关资源
    最近更新 更多