Вы можете десериализовать свой json в анонимный тип, а затем отфильтровать результат с помощью linq
Определить анонимный тип, например
var template = new {
requests = new [] {
new {
clientId = "",
requestId = "",
name = "",
quantity = "",
price = ""
}
}
};
Здесь вы можете видеть, что все типы являются строковыми, поэтому десериализациядолжно хорошо работать.Теперь вы должны проверить, что можно преобразовать каждую строку в соответствующий тип данных с помощью TryParse
.Полный код:
var json = "{\r\n \"requests\":[\r\n {\r\n \"clientId\":\"1\",\r\n \"requestId\":\"1\",\r\n \"name\":\"Bułka\",\r\n \"quantity\":\"1\",\r\n \"price\":\"10.00\"\r\n },\r\n {\r\n \"clientId\":\"1\",\r\n \"requestId\":\"2.1\",\r\n \"name\":\"Chleb\",\r\n \"quantity\":\"2\",\r\n \"price\":\"15.00\"\r\n },\r\n {\r\n \"clientId\":\"1\",\r\n \"requestId\":\"2\",\r\n \"name\":\"Chleb\",\r\n \"quantity\":\"5\",\r\n \"price\":\"15.00\"\r\n },\r\n {\r\n \"clientId\":\"2\",\r\n \"requestId\":\"1\",\r\n \"name\":\"Chleb\",\r\n \"quantity\":\"1\",\r\n \"price\":\"10.00\"\r\n }\r\n ]\r\n}";
var template = new { requests = new [] { new {clientId = "", requestId = "", name = "", quantity = "", price = ""} }};
var tempRequestCollection = JsonConvert.DeserializeAnonymousType(json, template);
var result = new RequestCollection
{
requests = tempRequestCollection.requests
.Where(r =>
long.TryParse(r.requestId, out var _)
&& int.TryParse(r.quantity, out var _)
&& double.TryParse(r.price, out var _)
)
.Select(r => new Request
{
clientId = r.clientId,
requestId = long.Parse(r.requestId),
name = r.name,
quantity = int.Parse(r.quantity),
price = double.Parse(r.price)
})
.ToList()
};