2016-09-09 1 views
1

Я получил строку JSON с массивом, как это:Добавление поля в JSON массив

{ 
    "Id": 123, 
    "Username": "Sr. X", 
    "Packages": [ 
    { 
     "Name": "Cups", 
     "SupplierId": 1, 
     "ProviderGroupId": 575, 
     "SupplierName": "Foo Cups" 
    }, 
    { 
     "Name": "Pins", 
     "SupplierId": 5, 
     "ProviderGroupId": 1082, 
     "SupplierName": "Foo Pins" 
    } 
    ] 
} 

и я хочу, чтобы добавить новое поле в пакеты массив, как:

"Packages": [ 
    { 
     "Name": "Cups", 
     "SupplierId": 1, 
     "ProviderGroupId": 575, 
     "SupplierName": "Foo Cups", 
     "New Field": "Value" 
    },... 

Сейчас я может добавить новое поле, но в основном объекте я использую библиотеку Json.NET для выполнения этой работы, но, похоже, документация не достигает этого уровня.

Неужели кто-то из вас сделал это раньше?

+0

Можете ли вы не просто сериализовать «основной объект» снова с помощью 'JsonConvert.SerializeObject();' после добавления нового объекта в коллекцию? –

+2

Что именно вы пытаетесь сделать? В документации Json.NET довольно ясно, как [добавлять свойства в JObject's] (http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_Add.htm) ... –

+0

Я получаю строка с структурой JSON (первый фрагмент), но я хочу добавить к ней новое поле и значение, чтобы затем проанализировать его на xml, но эта часть я уже сделал это –

ответ

2

JObject implemets IDictionary.

var jObj = JObject.Parse(json); 
foreach(var item in jObj["Packages"]) 
{ 
    item["New Field"] = "Value"; 
} 
var newjson = jObj.ToString(Newtonsoft.Json.Formatting.Indented); 
+0

Спасибо за ваш ответ L.B. это сработало. Я не работал с JSON раньше, и я подумал, что пришло время, поэтому я начал практиковать, теперь я знаю немного больше. –

-1

Попробуйте

JObject root = (JObject) JsonConvert.DeserializeObject(File.ReadAllText("products.json")); 
JArray packages = (JArray) root["Packages"]; 

JObject newItem = new JObject(); 
newItem["Name"] = "Cups"; 
// ... 

packages.Add(newItem); 

Console.WriteLine(root); // Prints new json 
+0

Спасибо за ответ, но подход LB работал для меня. Ура! –