2013-05-31 2 views
2

У меня есть этот JSON данныеИспользование Json.NET добавить логическое свойство

{ 
    "extensions": { 
     "settings" : { 
      "extension1": { 
       "property1": "value 1", 
       "property2": "value 2" 
      } 
     } 
    } 
} 

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

{ 
    "extensions": { 
     "settings" : { 
      "extension1": { 
       "property1": "value 1", 
       "property2": "value 2", 
       "bool_property": true 
      } 
     } 
    } 
} 

Я только этот код и я застрял с AddAfterSelf и AddBeforeSelf

string pref = "path_of_the_preferences_file"; 
string _pref = string.empty; 
using (StreamReader reader = new StreamReader(pref, Encoding.UTF8)) 
{ 
    _pref = reader.ReadToEnd(); 
} 

// REFORMAT JSON.DATA 
JObject json = JObject.Parse(_pref); 
var extension1 = json["extensions"]["settings"]["extension1"]; 

Как вставить новый логическое свойство «bool_property»?

Благодаря

+0

Какое отношение это имеет отношение к json.net? –

+0

Я использую json.net от newtonsoft для десериализации данных JSON и манипулирования им для добавления дополнительного свойства. –

ответ

0

Я получил его

string pref = "path_of_the_preferences_file"; 
string _pref = string.empty; 
using (StreamReader reader = new StreamReader(pref, Encoding.UTF8)) 
{ 
    _pref = reader.ReadToEnd(); 
} 

// REFORMAT JSON.DATA 
JObject json = JObject.Parse(_pref); 
var extension1 = json["extensions"]["settings"]["extension1"]; 

var a = extension1.Children(); 
JProperty cond_it = null; 

foreach (var b in a) 
{ 
    if (b.ToString().ToLower().Contains("cond_it")) 
    { 
     cond_it = (JProperty)b; 

     break; 
    } 
} 

if (cond_it != null) 
{ 
    var b = cond_it.Value.SelectToken("location").Parent; 
    b.AddAfterSelf(new JProperty("blacklist", true)); 
} 
3

Deserialize ваш JSON, добавить свойство и сериализовать его обратно в строку.

dynamic sourceJson = JsonConvert.DeserializeObject(json, typeof(object)); 
sourceJson.extensions.settings.extension1.bool_property = false; 
var modifiedJson = JsonConvert.SerializeObject(sourceJson, Formatting.Indented); 
7

JObject существу словарь. Просто получите ссылку на объект, к которому вы хотите добавить свойство, и добавьте его.

var propertyName = "bool_property"; 
var value = true; 

var obj = JObject.Parse(json); 
var extension1 = obj.SelectToken("extensions.settings.extension1") as JObject; 
if (extension1 != null) 
{ 
    extension1[propertyName] = value; 
} 

Если вы ориентируетесь .NET 4 и выше, вы знаете структуру JSON и имя свойства вы хотите добавить, вы можете использовать динамический здесь.

var value = true; 

dynamic obj = JObject.Parse(json); 
obj.extensions.settings.extension1.bool_value = value; 

Вы даже можете смешивать и сочетать.

var propertyName = "bool_property"; 
var value = true; 

dynamic obj = JObject.Parse(json); 
obj.extensions.settings.extension1[propertyName] = value; 
Смежные вопросы