Предположим, у меня есть текстовый файл JSON, в котором есть несколько элементов .. Мне нужно отредактировать в нем указанный c элемент, добавив к нему еще одну пару ключ / значение. Это изменение необходимо сделать только для указанного c элемента в файле JSON, а не для других элементов в этом текстовом файле. Кроме того, изменение должно выдерживать будущие изменения любых других частей текстового файла.
Например, предположим, что текстовый файл имеет такие записи (...
означает больше похожих записей):
{
"Blah": "Blah",
"Blah": "Blah",
"Blah": "Blah",
"Blah": "Blah",
"TopologyResources": [
.....
,
{
"ResourceUri": "https://proto23.devspace.com/merger",
"ActAsPrivileges": [
"UserData.Read",
"UserData.ReadWrite"
],
"AppOnlyPrivileges": [
"UserData.Read",
"UserData.ReadWrite",
"UserMeetingData-Internal.ReadWrite"
]
},
.....
]
}
Я хочу изменить приведенное выше на это (обратите внимание на добавление ключа GlobalTopologyAccessScopes
:
{
"Blah": "Blah",
"Blah": "Blah",
"Blah": "Blah",
"Blah": "Blah",
"TopologyResources": [
.....
,
{
"ResourceUri": "https://proto23.devspace.com/merger",
"ActAsPrivileges": [
"UserData.Read",
"UserData.ReadWrite"
],
"AppOnlyPrivileges": [
"UserData.Read",
"UserData.ReadWrite",
"UserMeetingData-Internal.ReadWrite"
],
"GlobalTopologyAccessScopes": [
{
"ScopeType": "Dev",
"AccessType": "All"
}
]
},
.....
]
}
Есть ли какой-либо более элегантный способ сделать это изменение, кроме кода ниже что выглядит уродливо?
string originalText = File.ReadAllText(filepath);
string find = " {\r\n \"ResourceUri\": \"https://proto23.devspace.com/merger\",\r\n \"ActAsPrivileges\": [\r\n \"UserData.Read\",\r\n \"UserData.ReadWrite\"\r\n ],\r\n \"AppOnlyPrivileges\": [\r\n \"UserData.Read\",\r\n \"UserData.ReadWrite\",\r\n \"UserMeetingData-Internal.ReadWrite\"\r\n ]\r\n }";
string replace = " {\r\n \"ResourceUri\": \"https://proto23.devspace.com/merger\",\r\n \"ActAsPrivileges\": [\r\n \"UserData.Read\",\r\n \"UserData.ReadWrite\"\r\n ],\r\n \"AppOnlyPrivileges\": [\r\n \"UserData.Read\",\r\n \"UserData.ReadWrite\",\r\n \"UserMeetingData-Internal.ReadWrite\"\r\n ],\r\n \"GlobalTopologyAccessScopes\": [\r\n {\r\n \"ScopeType\": \"Dev\",\r\n \"AccessType\": \"All\"\r\n }\r\n ]\r\n }";
newText = originalText.Replace(find, replace);
File.WriteAllText(filepath, newText);
Примечание. Если вы думаете о десериализации данных JSON в класс C#, внесите изменения, а затем снова напишите сериализованную версию. Позвольте мне сказать вам, что не существует класса C# для десериализации данных json в ..
EDIT: В основном объект уровня root имеет ключ с именем TopologyResources
, который является массив .. Ключ GlobalTopologyAccessScopes
необходимо добавить к этому объекту в массиве TopologyResources
, который имеет ResourceUri: https://proto23.devspace.com/merger