4

私はこのJSONデータを持っています

{
    "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" を挿入するにはどうすればよいですか?

ありがとう

4

3 に答える 3

7

AJObjectは基本的に辞書です。プロパティを追加したいオブジェクトへの参照を取得して追加するだけです。

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;
于 2013-05-31T01:44:09.963 に答える
4

JSON をデシリアライズし、プロパティを追加して、シリアライズして文字列に戻します。

dynamic sourceJson = JsonConvert.DeserializeObject(json, typeof(object));
sourceJson.extensions.settings.extension1.bool_property = false;
var modifiedJson = JsonConvert.SerializeObject(sourceJson, Formatting.Indented);
于 2013-05-31T01:29:18.583 に答える