【问题标题】:How can I deserialize a json in c#如何在 C# 中反序列化 json
【发布时间】:2019-01-28 07:32:48
【问题描述】:

您好,我正在尝试在 c# 中反序列化以下 json:

{  
 "Labels":[  
    {  
       "DeviceID":9,
       "Disabled":false,
       "Id":0,
       "Internal":"1@CB_I_AllCloseCheck",
       "Label":"CB_I_AllCloseCheck",
       "MAddress":0,
       "Mask":2147483648,
       "ModuleID":4,
       "Offset":0,
       "Position":1,
       "SectionID":0,
       "Type":16
     }
   ]
 }

使用以下代码行:

Labels myDeserializedObjList = (Labels)JsonConvert.DeserializeObject(sub, typeof(Labels));

字符串 sub 像字符串一样包含这个 json。我的班级标签如下:

public class Labels
    {
        public string DeviceID { get; set; }
        public string Disabled { get; set; }
        public string IValue { get; set; }
        public string Id { get; set; }
        public string Internal { get; set; }
        public string Label { get; set; }
        public string MAddress { get; set; }
        public string Mask { get; set; }
        public string ModuleID { get; set; }
        public string Offset { get; set; }
        public string Position { get; set; }
        public string SectionID { get; set; }
        public string Type { get; set; }
    }

但是这个操作的结果是我所有的属性都等于null。有谁知道我做错了什么?

【问题讨论】:

  • 您有一个具有Labels 属性的对象,其中包含一个标签数组。您正试图反序列化它,就好像它是单个 Labels 对象一样。 Labels 不是列表
  • 你需要在列表中打包标签(来自 json)。你得到的回复是List<Labels> Labels
  • 好的,所以代码应该像这个? List myDeserializedObjList = (List)JsonConvert.DeserializeObject(sub, typeof(List));
  • 在 vs2017 中将您的 json 复制到剪贴板,然后选择编辑/粘贴特殊/粘贴类作为 json。这将生成与您的 json 完全匹配的类。
  • 再次使用 Json2Csharp 或 Visual Studio 特殊粘贴回答了一个 Json C# 问题。

标签: c# json rest


【解决方案1】:

目前你的根对象就是:一个对象。它不是一个数组。它唯一的属性(标签)是一个数组。

你应该添加一个额外的“根对象”类:

public class LabelsContainer
{
    public IList<Labels> Labels {get;set;}
}

然后反序列化为:

var labelsContainer = Newtonsoft.Json.JsonConvert.DeserializeObject<LabelsContainer>(data);
var labels = labelsContainer?.Labels;

【讨论】:

    【解决方案2】:

    JSON 字符串显示一个具有 Labels 属性的对象,该属性包含一个标签数组。你需要尝试类似的东西:

    class LabelsDTO
    {
        public Labels[] Labels{get;set;}
    }
    
    ...
    
    var dto = JsonConvert.DeserializeObject<LabelsDTO>(sub);
    
    for (var label in dto.Labels)
    {
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多