C# 使用JSON.NET添加布尔属性
我有这个JSON数据C# 使用JSON.NET添加布尔属性,c#,json,json.net,C#,Json,Json.net,我有这个JSON数据 { "extensions": { "settings" : { "extension1": { "property1": "value 1", "property2": "value 2" } } } } 我的目标是使用JSON.NET添加一个新的布尔属性,如下所示 { "extensions": {
{
"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_属性”
谢谢,我收到了
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));
}
反序列化JSON,添加属性并将其序列化回字符串。
dynamic sourceJson = JsonConvert.DeserializeObject(json, typeof(object));
sourceJson.extensions.settings.extension1.bool_property = false;
var modifiedJson = JsonConvert.SerializeObject(sourceJson, Formatting.Indented);
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;
}
如果您的目标是.NET4及更高版本,那么您知道json的结构和要添加的属性的名称,您可以在这里使用dynamic
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;
这与json.net有什么关系?我正在使用newtonsoft中的json.net对json数据进行反序列化,并对其进行操作以添加其他属性。