【问题标题】:Deserialize Json to Object Exception将 Json 反序列化为对象异常
【发布时间】:2015-02-06 05:11:16
【问题描述】:

我有一个 json 字符串:

{"GetOrderListResponse":
{"orderListResponse":
    {
    "orderDetails":
        [
        {"order":
            {
                "orderId":208,
                "legDetails":
                    {
                        "legNumber":1,
                        "symbolInfo":
                            {
                                "symbol":"CSCO"
                            }
                    }
            }
        },
        {"order":
            {
                "orderId":200,
                "legDetails":
                    [
                        {
                            "legNumber":1,
                            "symbolInfo":
                            {
                                "symbol":"IBM"
                            }
                        },
                        {
                            "legNumber":2,
                            "symbolInfo":
                            {
                                "symbol":"IBM",
                                "callPut":"CALL",
                                "expYear":2010,
                                "expMonth":4,
                                "expDay":17,
                                "strikePrice":115
                            }
                        }
                    ]
            }
        }
      ]
    }
}
}

我有对象

public class OrderListResponse
{
    public List<OrderDetail> orderDetails { get; set; }
}

public class OrderDetail
{
    public Order order { get; set; }
}

public class Order
{
    public long orderId { get; set; }
    public List<LegDetail> legDetails { get; set; }
}

public class LegDetail
{
    public long legNumber { get; set; }
    public Symbol symbolInfo { get; set; }
}

public class Symbol
{
    public string symbol { get; set; }
    public string callPut { get; set; }
    public int expYear { get; set; }
    public int expMonth { get; set; }
    public int expDay { get; set; }
    public int strikePrice { get; set; }
}

所以当我使用代码时:

var objectValue = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(jsonString);

var objectDeserialize = JsonConvert.DeserializeObject<OrderListResponse>(objectValue.Values.First()["orderListResponse"].ToString());

我收到一条错误消息:

无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[LegDetail]' 因为该类型需要 JSON 数组(例如 [1,2 ,3]) 正确反序列化。

谁能告诉我正确的代码让它工作?

【问题讨论】:

    标签: c# json deserialization json-deserialization


    【解决方案1】:

    一阶的logdetails不是数组...

    "legDetails":
     {
        "legNumber":1,
        "symbolInfo":
         {
           "symbol":"CSCO"
         }
     }
    

    应该如下:

    "legDetails":
     [{
        "legNumber":1,
        "symbolInfo":
         {
           "symbol":"CSCO"
         }
     }]
    

    更新:

    所以现在的问题是你想反序列化一个有时可以是数组,有时可能代表一个对象的 json。

    查看另一个stackoverflow线程:Deserializing JSON when sometimes array and sometimes object

    这可能会帮助您解决问题。

    【讨论】:

    • json字符串是从WebService中得到的,所以我有一些命令legdetails不是数组,那你有什么处理legdetails的解决方案吗?
    【解决方案2】:

    您的 JSON 无效。应该是:

    {
       "GetOrderListResponse":{
          "orderListResponse":{
             "orderDetails":[
                {
                   "order":{
                      "orderId":208,
                      "legDetails":[
                         {
                            "legNumber":1,
                            "symbolInfo":{
                               "symbol":"CSCO"
                            }
                         }
                      ]
                   }
                },
                {
                   "order":{
                      "orderId":200,
                      "legDetails":[
                         {
                            "legNumber":1,
                            "symbolInfo":{
                               "symbol":"IBM"
                            }
                         },
                         {
                            "legNumber":2,
                            "symbolInfo":{
                               "symbol":"IBM",
                               "callPut":"CALL",
                               "expYear":2010,
                               "expMonth":4,
                               "expDay":17,
                               "strikePrice":115
                            }
                         }
                      ]
                   }
                }
             ]
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多