Пустой список JSON рассматривается как ноль - PullRequest
3 голосов
/ 15 мая 2019

У меня проблема с пустыми списками JSON, десериализирующими в ноль, в то время как пустые значения десериализуются в пустой список.

Использование этого сценария тестирования в совершенно новом проекте MVC:

public class TestController : Controller
{
   public ActionResult Index(ImportObject importObject)
   {
      return Content("Response");
   }

   public class ImportObject
   {
      public List<string> StringListNull { get; set; }
      public List<string> StringListEmpty { get; set; }
      public List<string> StringListPopulated { get; set; }
   }
}

IЯ публикую следующий JSON:

{
  "StringListNull": null,
  "StringListEmpty": [],
  "StringListPopulated": ["one", "two"]
}

И это происходит:

Debugging result

Ожидается список заполненных строк.Но, на мой взгляд, нулевое значение StringListNull должно привести к тому, что оно будет нулевым.

При передаче значения [] я ожидаю, что оно превращается в пустой список

Я что-то упускаю из виду?Как сделать пустое значение пустым списком, а пустым списком?

Что управляет сериализацией по умолчанию из JSON в класс параметров (ImportObject)?

/ K

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Я попробовал ваш код и работает абсолютно нормально, возможно, вы переключаете StringListNull и StringListEmpty.

enter image description here

Вот как я это проверил, попробуйте и посмотрите, где вы делаете что-то не так:

public class ImportObject
{
    public List<string> StringListNull { get; set; }
    public List<string> StringListEmpty { get; set; }
    public List<string> StringListPopulated { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        var sb = new StringBuilder();
        var line = string.Empty;

        while (!string.IsNullOrWhiteSpace((line = Console.ReadLine())))
        {
            sb.AppendLine(line);
        }

        var json = sb.ToString().Trim();
        var inputObj = JsonConvert.DeserializeObject<ImportObject>(json);

        Console.WriteLine();
    }
}

Это простое консольное приложение для проверки вашей логики. Редактировать: протестировано с вашим вводом JSON:

{
  "StringListNull": null,
  "StringListEmpty": [],
  "StringListPopulated": ["one", "two"]
}
0 голосов
/ 15 мая 2019

Ну, вы можете использовать Newtonsoft.Json или Json.NET для сериализации или десериализации Json. Это даст вам необходимые результаты.

Вот код, который я пробовал с ним:

static void Convert()
{
    string K = @"{ ""StringListNull"": null, ""StringListEmpty"": [], ""StringListPopulated"": [""one"", ""two""]}";
    var list= JsonConvert.DeserializeObject<ImportObject>(K);
}

public class ImportObject
{
    public List<string> StringListNull { get; set; }
    public List<string> StringListEmpty { get; set; }
    public List<string> StringListPopulated { get; set; }
}

А в списке объект находится именно так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...