У меня есть документ JSon и я пытаюсь получить значение для AnalogInput для каждого канала от 1 до 4. Я попробовал этот код:Извлечение значения из объекта Json в C#
JObject originalObject = JObject.Parse(testJsonObject);
var analogInputTrueValues = originalObject.Descendants().OfType<JProperty>().Where(p => p.Name == "DigitalInput").Select(x => x.Value).ToArray();
где testJsonObject это Json-файл, который загружается другим методом.
отладки кода, значение analogInputTrueValues является:
{Newtonsoft.Json.Linq.JToken[4]}
[0]: {13}
[1]: {13}
[2]: {14}
[3]: {14}
, который является правильным. но мне интересно иметь массив или список, например {"13", "13", "14", "14"}. Здесь я не могу двигаться вперед, так как я не могу извлечь эти точные значения и иметь их в списке или массиве. Даже когда я делаю:
digitalInputTrueValues.GetValue(0)
{13}
base: {13}
HasValues: false
Type: String
Value: "13"
Я не могу извлечь значение, что и я заинтересован в Как я могу обойти такого рода проблемы и извлечь мои нужные значения.? Объект, который я работаю с заключается в следующем:
{
"module": {
"serial": "3",
"label": "A",
"lat": "B",
"long": "C",
"channels": [
{"channel": "1", "label": "Channel 1", "AnalogInput": "13", "AnalogInputRaw": "13", "AnalogInputScale": "Raw", "DigitalInput": "Off"},
{"channel": "2", "label": "Channel 2", "AnalogInput": "13", "AnalogInputRaw": "13", "AnalogInputScale": "Raw", "DigitalInput": "On"},
{"channel": "3", "label": "Channel 3", "AnalogInput": "14", "AnalogInputRaw": "14", "AnalogInputScale": "Raw", "DigitalInput": "On"},
{"channel": "4", "label": "Channel 4", "AnalogInput": "14", "AnalogInputRaw": "14", "AnalogInputScale": "Raw", "DigitalInput": "On"}
],
"variables": [
{"1": "0"},
{"2": "0"},
{"3": "1"},
{"4": "0"}
]
}
}
Th anks, это сработало. Является способ, которым я извлекаю значение AnalogInput хорошим способом? Есть ли лучший способ сделать это? – user843681
Использование LINQ-to-JSON, как вы делаете, является правильным и хорошим. Альтернативным методом было бы создание строго типизированных классов, соответствующих вашему JSON, а затем использование 'JsonConvert.DeserializeObject()' для десериализации JSON в ваши классы. Это зависит от личных предпочтений. –
Я добавил некоторые ответы на свой вопрос, чтобы вы могли сравнить разницу между этими двумя методами. Использование LINQ-to-JSON намного меньше кода, но некоторые люди находят, что строго типизированные классы легче работать. –