使用JSON.NET添加布尔属性

Jay*_*asa 3 c# json json.net

我有这个JSON数据

{
    "extensions": {
        "settings" : {
            "extension1": {
                "property1": "value 1",
                "property2": "value 2"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是使用JSON.NET添加一个新的布尔属性,如下所示

{
    "extensions": {
        "settings" : {
            "extension1": {
                "property1": "value 1",
                "property2": "value 2",
                "bool_property": true
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我只有这个代码而且我坚持使用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"];
Run Code Online (Sandbox Code Playgroud)

如何插入新的布尔属性"bool_property"?

谢谢

Jef*_*ado 7

A 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;
}
Run Code Online (Sandbox Code Playgroud)

如果你的目标是.NET 4及更高版本,你知道json的结构和你想要添加的属性的名称,你可以在这里使用dynamic.

var value = true;

dynamic obj = JObject.Parse(json);
obj.extensions.settings.extension1.bool_value = value;
Run Code Online (Sandbox Code Playgroud)

你甚至可以混搭.

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

dynamic obj = JObject.Parse(json);
obj.extensions.settings.extension1[propertyName] = value;
Run Code Online (Sandbox Code Playgroud)