c# - 将Json反序列化为对象异常

标签 c# json deserialization json-deserialization

我有一个 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]) 正确反序列化。

有人可以告诉我正确的代码吗?

最佳答案

第一顺序的logdetails不是数组...

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

应该像下面这样:

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

更新:

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

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

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

关于c# - 将Json反序列化为对象异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358965/

相关文章:

java - 使用 Jackson 将 Json 反序列化为其他类层次结构

c# - MasterPage .FindControl类

c# - 非法尝试使用文本/字节主机变量 - 插入文本列

java - 将 JSON 数组读入 Java 数组/列表/映射

sql - 从 asp 中错误的 mysql 格式日期生成 json

c# - 使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能是 LINQ to JSON?)

java - 将字段传递给自定义反序列化器类 Jackson

c# - 使用 DTO 和 BO

c# - 从 MultiDictionary 获取所有键

json - 解析Elasticsearch的错误嵌套对象