【问题标题】:JSON not deserializing correctly with large objectJSON 没有正确反序列化大对象
【发布时间】:2021-09-16 17:41:39
【问题描述】:

我正在尝试反序列化 JSON 字符串,但由于某种原因它不起作用。

string json_string = "{'CartID':{'ID':253419,'AuthenticatedKey':223239},'CustomerID':null,'PurchaseItems':null,'TenderInformation':null,'ModifyCartItems':null,'AdditionalCartInformation':{'ServiceInformation':{'ServiceInformationItem':[{'ServiceID':243401}]}}}";

modifyCartReq = JsonConvert.DeserializeObject<ModifyCartReq>(json_string);

我也尝试了以下

string json_string = "{'CartID':{'ID':253419,'AuthenticatedKey':223239},'CustomerID':null,'PurchaseItems':null,'TenderInformation':null,'ModifyCartItems':null,'AdditionalCartInformation':{'ServiceInformation':{'ServiceInformationItem':[{'ServiceID':243401}]}}}";

modifyCartReq = JsonSerializer.Deserialize<ModifyCartReq>(json_string);

我在下面得到同样的错误

无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“ExampleType”,因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径“AdditionalCartInformation.ServiceInformation.ServiceInformationItem”,第 1 行,位置 213。

从我解决这个问题的尝试来看,感觉最终是因为一些语法问题。

【问题讨论】:

  • 你能分享ModifyCartReq类吗?
  • 这根本不是有效的 JSON。 JSON 需要双引号 " 而不是单引号 '

标签: c# json deserialization


【解决方案1】:

你必须修复 json_string

{
    "CartID": {
        "ID": 253419,
        "AuthenticatedKey": 223239
    },
    "CustomerID": null,
    "PurchaseItems": null,
    "TenderInformation": null,
    "ModifyCartItems": null,
    "AdditionalCartInformation": {
        "ServiceInformation": {
            "ServiceInformationItem": [{
                "ServiceID": 243401
            }]
        }
    }
}

试试这个

modifyCartReq = JsonSerializer.Deserialize<Root>(json_string);

并使用这些类

 public class CartID
    {
        public int ID { get; set; }
        public int AuthenticatedKey { get; set; }
    }

    public class ServiceInformationItem
    {
        public int ServiceID { get; set; }
    }

    public class ServiceInformation
    {
        public List<ServiceInformationItem> ServiceInformationItem { get; set; }
    }

    public class AdditionalCartInformation
    {
        public ServiceInformation ServiceInformation { get; set; }
    }

    public class Root
    {
        public CartID CartID { get; set; }
        public object CustomerID { get; set; }
        public object PurchaseItems { get; set; }
        public object TenderInformation { get; set; }
        public object ModifyCartItems { get; set; }
        public AdditionalCartInformation AdditionalCartInformation { get; set; }
    }

只需将对象替换为您的真实类型即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2019-04-06
    • 2021-06-08
    • 1970-01-01
    • 2017-10-26
    • 2011-05-18
    相关资源
    最近更新 更多