Удалите узел из JSON и переместите дочерние элементы вверх

#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