Как десериализовать JSON с переменными именами свойствC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как десериализовать JSON с переменными именами свойств

Сообщение Anonymous »

Это самый странный json, который мне когда-либо приходилось десериализовать. В каждом элементе массива есть переменные имена свойств:

Код: Выделить всё

{
"id": 1000,
"rows": [
{
"costPriceIncludingVat": 1000,
"productInfo": {
"depth": 600,
"width": 2200,
"parts": {
"876-08533": {
"depth": 0,
"width": 0,
"description": "Thing 3",
"properties": {
"measure": "0"
}
},
"cabinet-1": {
"depth": 600,
"width": 746,
"parts": {
"JW_876-76117_P": {
"depth": 0,
"width": 0,
"description": "Thing 1",
"properties": {
"measure": "0"
}
}
},
"description": "Closet"
}
},
"description": "My description"
}
}
],
"quotation": "ABCDEF"
}
У меня есть узел ProductInfo в качестве этого класса C#:

Код: Выделить всё

    public class ProductInfo
{
public int Depth;
public int Width;
public List
 Parts;
public string Description;
public Properties Properties;
}
Не обращайте внимания на несоответствия в именах свойств (регистр).
Каждый узел в «частях» представляет собой ProductInfo, но имена узлов не являются с именем «productInfo», поэтому десериализатор не знает, как его десериализовать.
Я использовал System.Text.Json, но он вообще не десериализует. Я просто получаю новый экземпляр корневого класса. Newtonsoft.Json делает это лучше, но вызывает исключение:

Невозможно десериализовать текущий объект JSON (например, {"name":"value"})
в тип
'System.Collections.Generic.List`1[ConsoleTestApp.IvenzaTests.Models.ProductInfo]'
потому что тип для правильной
десериализации требуется массив JSON (например, [1,2,3]). Чтобы исправить эту ошибку, либо измените JSON на массив JSON
(например, [1,2,3]), либо измените десериализованный тип так, чтобы он был обычным
типом .NET (например, не примитивным типом). например целое число, а не тип коллекции
, такой как массив или список), который можно десериализовать из объекта JSON
. JsonObjectAttribute также можно добавить к типу, чтобы заставить его
десериализоваться из объекта JSON.

Как заставить десериализатор распознавать каждый элемент в массиве частей как ProductInfo?
Желательно использовать System.Text.Json.

Подробнее здесь: https://stackoverflow.com/questions/792 ... pertynames
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»