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 шт):
Если я правильно все понял, вы пишете интеграционные тесты на 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);