【问题标题】:JSON serialize list of object with listposition C#JSON用listposition C#序列化对象列表
【发布时间】:2018-12-11 07:02:47
【问题描述】:

我正在尝试将 JSON 数据从 API 转换为列表。这是我从 API 中得到的:

{  
   "0":{  
      "Id":0,
      "FNr":"1",
      "Len":"1",
      "Typ":"1",
      "Sort":"1",
      "Low":"1",
      "Up":"1",
      "Rep":"1",
      "UC":"1",
      "Lo":"1",
      "Pf":"1",
      "SelP":"1",
      "Rel":"1",
      "RefLen":"1",
      "Description":"1",
      "Remarks":"1"
   },
   "1":{
      ...
   },
   "2":{
      ...
   }
}

现在我尝试将其反序列化为List<DBTableEntryModel>

var entries = JSON.Deserialize<List<DbTableEntryModel>>(jsonString);

这失败了,因为数字。如果我删除 JSON 字符串的数字,它工作得很好。有没有更简单的方法来解决这个问题,而无需拆分 JSON 字符串?

这是我的 DBTableEntryModel:

public class DbTableEntryModel
    {
        [StringLength(3)]
        [ColumnWidth("30px")]
        public string FNr { get; set; }
        [StringLength(5)]
        [ColumnWidth("60px")]
        public string Len { get; set; }
        [StringLength(3)]
        [ColumnWidth("30px")]
        public string Typ { get; set; }
        [StringLength(3)]
        [ColumnWidth("35px")]
        public string Sort { get; set; }
        [StringLength(10)]
        [ColumnWidth("100px")]
        public string Low { get; set; }
        [StringLength(10)]
        [ColumnWidth("100px")]
        public string Up { get; set; }
        [StringLength(1)]
        [ColumnWidth("30px")]
        public string Rep { get; set; }
        [StringLength(1)]
        [ColumnWidth("25px")]
        public string UC { get; set; }
        [StringLength(1)]
        [ColumnWidth("25px")]
        public string Lo { get; set; }
        [StringLength(1)]
        [ColumnWidth("25px")]
        public string Pf { get; set; }
        [StringLength(2)]
        [ColumnWidth("34px")]
        public string SelP { get; set; }
        [ColumnWidth("90px")]
        public string Rel { get; set; }
        [ColumnWidth("90px")]
        public string RefLen { get; set; }
        [TextArea]
        [Display(Name = "Description", ResourceType = typeof(Resources.Plugin))]
        public string Description { get; set; }
        [TextArea]
        [Display(Name = "Remarks", ResourceType = typeof(Resources.Plugin))]
        public string Remarks { get; set; }
    }

【问题讨论】:

  • 能否请您出示您的DbTableEntryModel

标签: c# json list serialization


【解决方案1】:

不要将您的 json 反序列化为 List&lt;DbTableEntryModel&gt;,而是使用 Dictionary&lt;string, DbTableEntryModel&gt; 之类的

var entries = JSON.Deserialize<Dictionary<string, DbTableEntryModel>>(jsonString);

然后您可以使用 foreach 循环从上面的字典中获取所有键和条目,例如

foreach (var entry in entries)
{
     var key = entry.Key;                 //"0", "1", "2", ...
     var dbTableEntryModel = entry.Value; // Your `DbTableEntryModel` model
}

【讨论】:

    【解决方案2】:

    如果你仍然想使用列表,你可以试试这个。

    var entries = JSON.Deserialize<Dictionary<string, DbTableEntryModel>>(jsonString).Select(x => x.Value).ToList();
    

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多