首页 > 解决方案 > 将 json(javascript 对象)反序列化为 c# 对象

问题描述

我有以下 javascript 对象,它看起来像 json,但是当我将其解析为 json 时出现错误:

{
  "1": {
    "name": "Manheim Simulcast ",
    "items": {
      "2": {
        "pos": "52",
        "name": "NY - Manheim Albany",
        "address": "",
        "zip": "12201",
        "coords": ""
      }
    }
  }
}

和以下课程:

public class auction_js_min
{
        public auction_id auction_id { set; get; }
    }

    public class auction_id
    {
        public string name { set; get; }
        public Items items { set; get; }
    }

    public class Items
    {
        public Sub_auction_id sub_auction_id { set; get; }

    }

    public class Sub_auction_id
    {
        public string pos { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public string zip { get; set; }
        public string coords { get; set; }
    }

当我将它反序列化为 C# 对象时,我得到了空对象:

auction_js_min obj = JsonConvert.DeserializeObject<auction_js_min>(auction_js);

知道如何解决吗?javascript 对象太大 87000 符号,我想遍历对象并检查值。

标签: c#jsonserialization

解决方案


我认为您在这里遇到的是您的对象已编号,并且您不能仅用编号命名一个类。在这种情况下,您的模型与您的 JSON 不匹配,因此您将得到的只是空值。您需要修改您的模型以匹配您拥有的 JSON,然后您可以将该 DTO 模型映射到更好地在 C# 中使用的东西。

这是一个反序列化 JSON 的示例模型:

public class auction_id
{
    public string name { set; get; }
    public IDictionary<int, Sub_auction_id> items { set; get; }
}

public class Sub_auction_id
{
    public string pos { get; set; }
    public string name { get; set; }
    public string address { get; set; }
    public string zip { get; set; }
    public string coords { get; set; }
}

然后像这样反序列化:

public void Deserialize()
{
    var auction = JsonConvert.DeserializeObject<IDictionary<int, auction_id>>(json);
}

推荐阅读