Как добавить новое свойство на определенном уровне в Json с помощью C#

#c# #json #json.net

#c# #json #json.net

Вопрос:

У меня есть Json, как показано ниже

 {
  "name": "123",
  "properties": {
    "pcName-A": {
      "model": "xyz"
    }
  }
}
  

Я хочу добавить свойство, как показано ниже

 {
  "name": "123",
  "properties": {
    "pcName-A": {
      "model": "xyz"
    },
    "pcName-B": {
      "model": "xyz"
    }
  }
}
  

Я использую библиотеку Newtonsoft и делаю, как показано ниже

 var jsonObj = JObject.Parse("jsonString");
jsonObj.SelectToken("properties").Children().First().AddAfterSelf(
                      new JProperty(pcName-B,
                        new JObject(
                          new JProperty("model", xyz))));
  

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

 var propertyObjectToAdd = new JObject():
jsonObj.Add("property1", propertyObjectToAdd);
  

или

 jsonObj["property1"] = propertyObjectToAdd
  

Такого простого способа нет для приведенного выше примера?

Ответ №1:

Вам просто нужно получить properties значение как a JObject с помощью приведения — затем вы можете вызвать Add его, чтобы добавить новое свойство:

 using Newtonsoft.Json.Linq;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string initialJson = File.ReadAllText("test.json");
        var jsonObj = JObject.Parse(initialJson);
        var properties = (JObject) jsonObj["properties"];
        properties.Add(new JProperty("pcName-B", new JObject { ["model"] = "xyz" }));
        Console.WriteLine(jsonObj);
    }
}
  

Вместо Add того, чтобы вы могли бы использовать:

 properties["pcName-B"] = new JObject { ["model"] = "xyz" };
  

… но я не знаю, есть ли какая-либо гарантия, что новое свойство появится после существующего.

Комментарии:

1. Упорядочение не проблема. Но здесь не хватает одной вещи: как вы объединяете «свойства» с исходным «jsonObj» после присвоения нового значения?

2.@KBNanda: Я не знаю, что вы имеете в виду — оно уже jsonObj есть. (Вы запустили код? Это дает ожидаемый результат.)

3. Да, моя ошибка. Это работает нормально. Спасибо. Я предположил, что просто добавив в Свойства, весь json не будет обновляться.