Предположим, у меня есть следующие JToken:уплощение в JToken
@"{
""data"": [
{
""company"": {
""ID"": ""12345"",
""location"": ""Some Location""
},
""name"": ""Some Name""
}
]
}";
Я хочу передать этот маркер в функцию FlattenToken, которая выводит эту JToken:
@"{
""data"": [
{
""company_ID"": ""12345"",
""company_location"": ""Some Location"",
""name"": ""Some Name""
}
]}"
Причина делать это так что я могу взять сплющенный JToken и десериализовать его в DataTable.
Я теряюсь в беспорядке JObjects, JTokens, JProperties и других JMadness. Я видел ответ на this post, который был полезен, но я все еще не понимаю.
Вот что я до сих пор:
public static JToken FlattenToken(JToken token)
{
foreach (JToken topLevelItem in token["data"].Children())
{
foreach (JToken field in topLevelItem.Value<JToken>())
{
foreach (JProperty property in field.Value<JObject>().Properties())
{
field.AddAfterSelf(JObject.Parse(@"{""" + property.Name + "_" + property.Value));
}
field.Remove();
}
}
return token;
}
Первая итерация внешнего цикла Еогеасп, topLevelItem =
{
"company": {
"ID": "12345"
},
"name": "Some Name"
}
И первой итерации через второй цикл по каждому элементу, поле =
"company": {
"ID": "12345"
}
Хорошо выглядит до сих пор. Но когда я попадаю в самый внутренний цикл foreach, я получаю исключение в строке foreach: «Нельзя использовать Newtonsoft.Json.Linq.JProperty для Newtonsoft.Json.Linq.JToken».
Не уверен, что там происходит. У меня создалось впечатление, что вызов field.Value собирался создать JToken и попытаться передать его в JProperty. Итак, где же JProperty пытается попасть в JToken, как показывает ошибка?
Кроме того, это похоже на довольно грубый способ сглаживания JToken. Есть ли способ лучше?
Это фантастика. Очень полезно! – jrsowles