如何在C#中反序列化json

时间:2019-01-28 07:32:48

标签: c# json rest

您好,我正在尝试在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));

string子字符串包含此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。有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

然后反序列化为该

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

答案 1 :(得分:2)

JSON字符串显示一个具有Labels属性的对象,其中包含标签数组。您需要尝试类似的事情:

class LabelsDTO
{
    public Labels[] Labels{get;set;}
}

...

var dto = JsonConvert.DeserializeObject<LabelsDTO>(sub);

for (var label in dto.Labels)
{
...
}