C# JSON Десериализация

Всем привет!
Имеется json пример:

{
  "ID": "",
  "record": [
    {
      "applicationdate": "2022-09-13",
    }
  ]
}

Имеются кейсы на проверку сервера, и при негативных кейсах, необходимо проверить то, что сервер будет принимать в себя только необходимый тип данных.
Cоответственно, вместо данных типа string мы будем отправлять int и наоборот, при этом название полей остается прежним. Вопрос как можно избежать дублирование кода, объявляя объекты.

Пример десериализации:

partial class As
{
    public List<ACross> agreementsData;

    
    public Agreements()
    {
        agreementsData = JsonConvert.DeserializeObject<InputData>
            (File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "\\" + @"pathJson", Encoding.Default))
            .InputDataForCross;
    }
}

class InputData
{
    public List<ACross> InputDataForCross { get; set; }
}

Ну и соответственно классы с эмуляцией json объекта с полями:

 public class AgreementCross
{
    public string ID { get; set; }
    public List<AgreementItems> record { get; set; }
}

public class AgreementItems
{
    public string applicationdate { get; set; }
}

Вопрос, как быть если я не знаю какой тип данных будет у поля applicationdate, была идея использовать обощения, но можно ли как то обойтись без них? Чтобы по 100 не объявлять по факту одни и те же объекты.


Ответы (1 шт):

Автор решения: Andrei Khotko

Если я правильно все понял, вы пишете интеграционные тесты на api-метод сервера, где вы хотите проверить, что json-объект, который отправляется через POST-запрос, не может быть обработан сервером, если его поля имеют неверный тип.

Один из вариантов - использовать ExpandoObject:

dynamic input = new System.Dynamic.ExpandoObject();
input.ID = "1"; // также можно писать input.ID = 1, input.ID = true и т.д.
input.record = "oops";

var jsonInput = JsonConvert.SerializeObject(input);
→ Ссылка