Есть JSON:
{
"Table1": {
"Field1": "abc",
"Field2": "def"
}
}
И есть код:
JObject data = JObject.Parse(myJson);
foreach (JProperty table in data.Properties())
{
tables.Add(table.Name, new TableFields(table.Value<JObject>())); // <- тут ошибка
}
При выполнении кода выдает исключение InvalidCastException
и говорит, что невозможно преобразовать значение в JObject
. Почему так?
Пока что я прописал костыль JObject.Parse(table.Value.ToString())
. Но далее я пытаюсь у полей со строками получить значения в формате String
и опять получаю эту ошибку. Вот код:
public TableFields(JObject source)
{
data = new Dictionary<string, string>();
foreach (JProperty prop in source.Properties()) data.Add(prop.Name, prop.Value<String>());
}
Что это за бред такой? Тем более у этих JProperty
в поле Type
везде указаны именно те типы, к которым я пытаюсь привести: JObject
в первом случае и String
во втором.
Используемый вами метод Extensions.Value<T>(this IEnumerable<JToken> value)
пытается преобразовать в указанный вами тип не значение свойства JProperty
, а само свойство (пару из ключа и значения). Такая операция не имеет смысла, отсюда и ошибка.
Вместо этого следует использовать свойство JProperty.Value
, чтобы получить именно значение свойства:
(JObject)table.Value
(string)prop.Value
Также можно использовать сначала свойство Value
, а потом - метод:
table.Value.Value<JObject>()
prop.Value.Value<string>()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть необходимость добавления CLR сборки в связке с самописной библиотекой классов (подключение к внешнему веб-сервису)При установке библиотеки...
Есть такой код на C#Можно ли его как-то упростить и привести к однострочному виду, т
Есть персонаж, который в сцене №3 берёт предмет «рычаг» (необходимый в сцене №1), на котором висит скрипт «LeverUpSave»