Как продублировать json?

У меня есть json которые я получаю данные в них могут быть разные но всегда есть Id. Мне нужно добавить такой же обьект в json который я получил и изменить ид на 1

Пример:

 {
"currentProfile": 1,
"profiles": [
  {
    "primary": {
      "Id" : 0,
      "color": {
        "b": 255,
        "g": 94,
        "r": 152,
        "a": 255
      },
      "bHasOutline": true,
      "outlineThickness": 1,
      "outlineOpacity": 1,
      "centerDotSize": 1,
      "centerDotOpacity": 1,
      "bDisplayCenterDot": false,
      "bFixMinErrorAcrossWeapons": false
    }
  }
]
}

Как должно быть

  {
 "currentProfile":1,
 "profiles":[
    {
       "primary":{
          "Id": 0,
          "color":{
             "b":255,
             "g":94,
             "r":152,
             "a":255
          },
          "bHasOutline":true,
          "outlineThickness":1,
          "outlineOpacity":1,
          "centerDotSize":1,
          "centerDotOpacity":1,
          "bDisplayCenterDot":false,
          "bFixMinErrorAcrossWeapons":false
       },
       "primary":{
          "Id": 1,
          "color":{
             "b":255,
             "g":94,
             "r":152,
             "a":255
          },
          "bHasOutline":true,
          "outlineThickness":1,
          "outlineOpacity":1,
          "centerDotSize":1,
          "centerDotOpacity":1,
          "bDisplayCenterDot":false,
          "bFixMinErrorAcrossWeapons":false
       }
    }
 ]

}


Ответы (1 шт):

Автор решения: EvgeniyZ

Пожалуйста, указывайте в вопросе все необходимые данные заранее! Вытягивать из вас все необходимое мне лично не очень хочется.

Если у вас JSON изначально неизвестен, вы не знаете большинство из его значений, но знаете базовые, то решение будет тогда примерно таким:

// JSON строка
var jsonString = "{\"currentProfile\":1,\"profiles\":[{\"primary\":{\"Id\":0,\"color\":{\"b\":255,\"g\":94,\"r\":152,\"a\":255},\"bHasOutline\":true,\"outlineThickness\":1,\"outlineOpacity\":1,\"centerDotSize\":1,\"centerDotOpacity\":1,\"bDisplayCenterDot\":false,\"bFixMinErrorAcrossWeapons\":false}}]}";

// Создаем JsonNode на основе строки
var rootNode = JsonNode.Parse(jsonString);

// Получаем profiles и преобразуем в JsonArray
var profiles = rootNode["profiles"].AsArray();

// Берем из JsonArray первый объект и на его основе создаем новый (клон) JsonNode
var copyNode = JsonNode.Parse(profiles[0].ToJsonString());

// Задаем новое значение нужной нам переменной
copyNode["primary"]["Id"] = 1;

// Добавляем новый JsonNode в JsonArray
profiles.Add(copyNode);

// Преобразуем обратно в строку WriteIndented - чтоб на выходе был "красивый вид", а не одна строка.
var result = rootNode.ToJsonString(new() { WriteIndented = true });

Результатом будет

{
  "currentProfile": 1,
  "profiles": [
    {
      "primary": {
        "Id": 0,
        "color": {
          "b": 255,
          "g": 94,
          "r": 152,
          "a": 255
        },
        "bHasOutline": true,
        "outlineThickness": 1,
        "outlineOpacity": 1,
        "centerDotSize": 1,
        "centerDotOpacity": 1,
        "bDisplayCenterDot": false,
        "bFixMinErrorAcrossWeapons": false
      }
    },
    {
      "primary": {
        "Id": 1,
        "color": {
          "b": 255,
          "g": 94,
          "r": 152,
          "a": 255
        },
        "bHasOutline": true,
        "outlineThickness": 1,
        "outlineOpacity": 1,
        "centerDotSize": 1,
        "centerDotOpacity": 1,
        "bDisplayCenterDot": false,
        "bFixMinErrorAcrossWeapons": false
      }
    }
  ]
}

Но я на вашем месте всеж узнал бы все возможные (необходимые) свойства объекта и делал бы простую десериализацию. Скажем так, это надежней и более удобней.

→ Ссылка