Использование рабочего объекта .Добавьте вложенный элемент

#c# #json

Вопрос:

Если бы у меня был объект Json:

 {  "data":{  "SomeArray":[  {  "name":"test1"  },  {  "name":"test2"  },  {  "name":"test3"  }  ]  } }  

И этот объект анализируется с помощью Jobject.Parse(jsonString);

Как бы я добавил поле, в data котором содержится количество элементов в массиве, которые будут перенаправлены в другую систему. Количество уже подсчитано. Мне просто нужно добавить это вот так:

 {  "data":{  "Count" : 3,  "SomeArray" : [  

Я пытался

 myJObject["data"].Add("Count",count);  

Но.Добавить здесь не работает. Единственный вариант, который я вижу, — это AddAfterSelf()

Неужели нет способа просто добавить простую пару значений ключа без необходимости Jproperty сначала создавать и добавлять ее с помощью AddAfterSelf ?

Или это правильный путь: x["Data"].AddAfterSelf(new JProperty("Count", count));

Ответ №1:

Проблема здесь в том, что myJObject["data"] возвращает JToken объект, который является базовым классом для объекта задания.

Если вы уверены, что «данные» всегда будут объектом, вы можете сделать следующее

 var data = myJObject.GetValue("data") as JObject; data.Add("Count",120);  

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

1. Как бы я затем добавил данные обратно в исходный объект задания, просто выполнив это myJObject["data"] = data; ?

2. @Bike_dotnet вы не должны этого делать. он будет автоматически присутствовать в myJObject , потому что это ссылочный тип данных.

Ответ №2:

Вы могли бы сделать это, используя JToken то, что вы получаете в myJObject["data"] качестве JObject . Например:

 var data = (JObject)myJObject["data"]; data.Add("Count", 3);