Member 14103699 Ответов: 2

Pass ienumerable<long? Длительный[] Б&ГТ; в качестве параметра возвращает значение null


Всем Привет,

У меня есть класс, как показано ниже

class Test
    {
        public long TEstId{ get; set; }

        
        public IEnumerable<(long? issueId, long[] newChildIds)> OrderChanges { get; set; }

}

Когда я передаю данные, как показано ниже, в вышеприведенную модель, свойство ienumberable возвращает null

{
  "TEstId": 179,
  "OrderChanges ": [
    {
      "item1": 12,
      "item2": [
        10
      ]
    }
  ]
}


Может ли кто - нибудь помочь мне решить эту проблему?
Спасибо-это заранее.

НЕ ЗНАЮ

Что я уже пробовал:

Я попробовал в интернете, но не получил никакой полезной информации.

Richard Deeming

Какую библиотеку вы используете для десериализации вашего JSON? Я только что попробовал с JSON.NET v12, и после удаления пробела из имени свойства "OrderChanges" ваш JSON правильно десериализуется в ваш класс.

Демонстрация[^]

NB: Мне пришлось установить демонстрационную версию для компиляции как .NET Core, потому что сайт DotNetFiddle не любит кортежи значений с компилятором .NET Framework и не позволяет добавлять ссылки NuGet с компилятором Roslyn. Но я пробовал тот же код в LINQPad 5, работающем против .NET Framework 4.8, и он работает.

2 Ответов

Рейтинг:
2

OriginalGriff

C# поддерживает кортежи, но ... JSON не имеет индикатора кортежа, поэтому он "делает все возможное" и генерирует тип, который не является кортежем. Если я исправлю JSON (удалив пробел из имени "OrderChanges ") и прогоню его через a Генератор классов JSON[^] ты понимаешь это:

public class OrderChange
{
    public int item1 { get; set; }
    public List<int> item2 { get; set; }
}

public class RootObject
{
    public int TEstId { get; set; }
    public List<OrderChange> OrderChanges { get; set; }
}
Вероятно, именно поэтому вы получаете null - классы просто не совпадают.

Я бы проверил, откуда вы взяли JSON - если он думает, что экспортирует кортежи, то его нужно посмотреть.


Member 14103699

Спасибо за ответ. Но мне нужно пойти с IEnumerable в соответствии с нашим дизайном.

OriginalGriff

Затем вам нужно будет изменить JSON и, вероятно, инструмент, который его создает.

Рейтинг:
2

F-ES Sitecore

Я удивлен, что вы не нашли никакой полезной информации о том, как десерилизовать JSON, есть много статей.

public class OrderChange
{
    public long item1 { get; set; }
    public long[] item2 { get; set; }
}

public class Test
{
    public long TEstId { get; set; }


    public IEnumerable<OrderChange> OrderChanges { get; set; }
}


Member 14103699

Есть ли возможность продолжить работу без создания нового класса

F-ES Sitecore

Ваши изменения порядка должны быть определены следующим образом

общественного IEnumerable&ЛТ;Кортеж&ЛТ;длиной?, длинные[]&ГТ;&ГТ; OrderChanges { получить; набор; }