Опреснение JSON-объекта содержит список объектов. Возвращает NULL для вложенного объекта. - PullRequest
0 голосов
/ 16 февраля 2019

Это моя первая попытка работы с десериализацией JSON.Я прочитал много постов в Stackoverflow, ни одно из предложенных решений не могло соответствовать моей проблеме, поэтому я заранее извиняюсь.Я создал следующие объекты:

public class Item
{
    public int ID { get; set; }
    public int LSum { get; set; }
    public int YSum { get; set; }
    public int TSum { get; set; }
    public int NSum { get; set; }
    public int MemberId { get; set; }
}

public class Something
{
    public int Id { get; set; }
    public string Phone { get; set; }
    public bool ExistingMember { get; set; }
    public IList<Item> Item { get; set; }
}

И при десериализации JSON это выглядит следующим образом: Следующий JSON, как я ожидаю, будет:

    {
   "Id":62,
   "Phone":"07",
   "ExistingMember":true,
   "Item":[
      {
         "ID":42,
         "LSum":0,
         "YSum":0,
         "TSum":0,
         "NSum":0,
         "MemberId":12
      }
   ]
}

Однако следующий метод это

   some= JsonConvert.DeserializeObject<something>(someResponse);

Он печатает json, как показано ниже: Следующий JSON - это то, что является возвращением "someResponse",

{
   "Id":62,
   "Phone":"07",
   "ExistingMember":true,
   "Item":null
}

Что мне не хватает, что список элементов возвращает нуль?

1 Ответ

0 голосов
/ 17 февраля 2019

Если вы хотите десериализовать строку json, которая в вашем случае является переменной someResponse, то вы все делаете правильно.

Чтобы проверить ваш код, я создал файл JSON с file.json name и поместите в него следующее:

{
  "Id": 62,
  "Phone": "07",
  "ExistingMember": true,
  "Item": [
    {
      "ID": 42,
      "LSum": 0,
      "YSum": 0,
      "TSum": 0,
      "NSum": 0,
      "MemberId": 12
    }
  ]
}

Затем ниже строк кода возьмите содержимое файла JSON (который в вашем случае является содержимым someResponse) и десериализуйте его в объект c #типа Something:

string jsonFilePath = @"C:\test\file.json";

var some = JsonConvert.DeserializeObject<Something>(File.ReadAllText(jsonFilePath));

Затем выведите свойство ID каждого элемента списка Item:

foreach(var item in some.Item)
{
    if (item != null)
    {
        Console.WriteLine($"item ID = {item.ID}");
    }               
}

Вывод:

item ID = 42

Итак, вполне возможно, что someResponse просто не имеет Item и выглядит так:

{
  "Id": 62,
  "Phone": "07",
  "ExistingMember": true
}

ОБНОВЛЕНИЕ:

Также япопробовал так:

var someResponse = @"{
  'Id': 62,
  'Phone': '07',
  'ExistingMember': true,
  'Item':[
    {
      'ID': 42,
      'LSum': 0,
      'YSum': 0,
      'TSum': 0,
      'NSum': 0,
      'MemberId': 12
    }
  ]
}
";

var some = JsonConvert.DeserializeObject<Something>(someResponse);

И some имеет список Item с 1 элементом enter image description here

...