Декодирование массива JSON на основе объектов в C#C#

Место общения программистов C#
Ответить
Anonymous
 Декодирование массива JSON на основе объектов в C#

Сообщение Anonymous »

Необходимость декодировать массив JSON необычного формата, где содержимое представляет собой не массив, а полноценные объекты:

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

{
"133v1": {
"128": "2024-01-24",
"155": "2024-04-01",
"1066": "2024-05-16",
"1198": "2024-09-25"
},
"1092v8": {
"589": "2024-12-23"
}
}
К сожалению, я не могу изменить входящий JSON, поскольку он поступает с одного из наших мейнфреймов. Имена объектов (например: 1092v8 и 133v1) могут меняться каждый раз, как и содержащиеся в них значения. Количество объектов также может варьироваться — иногда мы получаем только один. Иногда до 3 КБ.
Из-за этого я не могу создать POCO для декодирования JSON.
Я пробовал декодировать корневой объект в JObject (

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

JObject sensorObj = JObject.Parse(sensors);
), который даст мне некоторые данные, и я смогу просмотреть каждого дочернего элемента. Но тогда попытка получить каждый ключ/значение в дочернем элементе оказывается странно трудной; Мне не хватает чего-то, что (как мне кажется?) должно быть более очевидным.
В настоящее время я использую следующий цикл -

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

foreach (var item in versionOb.Children())
{
//Loop through each version.
foreach (var sensor in item.Children().Single().Children())
{
//Get the date -
string date = ((dynamic)sensor.Values().Single()).Value;
//Get the sensor readings
string sendorReading = ((dynamic)sensor).Name;
}
}
По какой-то причине мне нужно использовать свойства .Name и .Value после приведения их к Dynamic, потому что JToken этого не делает Кажется, эти свойства недоступны.
Есть ли лучший способ получить эти значения?
Изменить: как уже упоминалось, это менее удобно строки, строкового словаря, из-за родительского уровня.

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-c-sharp
Ответить

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

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

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

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

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