Есть 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>()
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости