Необходимость декодировать массив 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