您好,我正在尝试在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。有人知道我在做什么错吗?
答案 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)
{
...
}