首页 > 解决方案 > 如何在 C# 中反序列化 json

问题描述

您好我正在尝试在 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。有人知道我在做什么错吗?

标签: c#jsonrest

解决方案


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

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

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

然后反序列化为:

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

推荐阅读