Как я могу десериализовать JSON в C # - PullRequest
0 голосов
/ 28 января 2019

Здравствуйте, я пытаюсь десериализовать следующий json в c #:

{  
 "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 как строку.Где мой класс Labels выглядит следующим образом:

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; }
    }

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

Ответы [ 2 ]

0 голосов
/ 28 января 2019

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

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

...

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

for (var label in dto.Labels)
{
...
}
0 голосов
/ 28 января 2019

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

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

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

и затем десериализовать его до:

var labelsContainer = Newtonsoft.Json.JsonConvert.DeserializeObject<LabelsContainer>(data);
var labels = labelsContainer?.Labels;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...