Как я могу десериализовать json в С#

Здравствуйте, я пытаюсь десериализовать следующий 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; }
    }

Но в результате этой операции все мои атрибуты равны нулю. Кто-нибудь знает, что я делаю неправильно?

🤔 А знаете ли вы, что...
C# поддерживает LINQ (Language Integrated Query) для удобного запроса и обработки данных.


79
2

Ответы:

Решено

На данный момент ваш корневой объект — это просто объект. Это не массив. Его единственное свойство (Labels) — это массив.

Вы должны добавить дополнительный класс «корневого объекта»:

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

И затем десериализуйте это:

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

Строка JSON показывает объект со свойством Labels, содержащим массив меток. Вам нужно попробовать что-то вроде:

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

...

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

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