#c# #json #json.net
#c# #json #json.net
Вопрос:
У меня есть некоторый JSON, и я хотел бы удалить узел из JSON, но переместить узлы внутри удаленного узла к его родительскому.
Вот JSON, с которого я начинаю:
{
"Response": {
"Outcome": {
"KeyValueOfstringOutcomepQnxSKQu": [
{
"Key": "Icon",
"Value": {
"DataType": "System.String",
"Field": "Icon",
"Value": "O"
}
},
{
"Key": "IconDescription",
"Value": {
"DataType": "System.String",
"Field": "IconDescription",
"Value": "Old"
}
},
{
"Key": "IconLongDescription",
"Value": {
"DataType": "System.String",
"Field": "IconLongDescription",
"Value": "Older"
}
}
]
}
}
}
Это JSON, с которым я хочу закончить. Мне нужно, чтобы KeyValueOfstringOutcomepQnxSKQu
узел был удален, но его дочерние элементы все еще должны присутствовать в JSON:
{
"Response": {
"Outcome": [
{
"Key": "Icon",
"Value": {
"DataType": "System.String",
"Field": "Icon",
"Value": "O"
}
},
{
"Key": "IconDescription",
"Value": {
"DataType": "System.String",
"Field": "IconDescription",
"Value": "Old"
}
},
{
"Key": "IconLongDescription",
"Value": {
"DataType": "System.String",
"Field": "IconLongDescription",
"Value": "Older"
}
}
]
}
}
Я пытался удалить узел подобным образом, но это все, что у меня получилось:
JObject rss = JObject.Parse(Convert.ToString(jsonText));
var x = rss.Remove("KeyValueOfstringOutcomepQnxSKQu");
Как я могу переместить дочерние элементы вверх?
Комментарии:
1. Я думаю, что JObject — это класс с предопределенными свойствами. То, что вы хотите сделать, это изменить определение вашего класса во время выполнения, а это невозможно
2. @MazaherBazari
JObject
действительно больше похоже наDictionary
, где пары ключ-значение (свойства) могут добавляться и удаляться по желанию. Он создан для работы с JSON.
Ответ №1:
Вы можете сделать это с помощью SelectToken
и Replace
:
JObject rss = JObject.Parse(jsonText);
rss.SelectToken("Response.Outcome")
.Replace(rss.SelectToken("Response.Outcome.KeyValueOfstringOutcomepQnxSKQu"));
jsonText = rss.ToString();
Скрипка:https://dotnetfiddle.net/L6XoAf