#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 не будет обновляться.