我有一些JSON代表应用程序的设置。简化示例如下所示:
{
"data": {
"app_settings": {
"jbofmngeodhmdlnicmlnfhjmmbdbcokh": {
"title": "app 1",
"description": "desc 1",
"custom_app_setting_stored_below": "asd",
"cust1": 3,
"cust2": false
},
"esghmzlnxcfpnrkbokmvgtjmcaknysdb": {
"title": "app 2",
"description": "desc 2",
"custom_app_setting_stored_below": "asd",
"cust8": 12,
"cust10": "11/25/2013",
"cust11": "nothing",
"cust12": true,
"cust13": 3
}
}
}
}
应用程序可以有扩展名(在设置中用长随机字符串表示),每个扩展名都可以在其下面有自己的自定义设置。
我可以通过为扩展添加“黑名单”属性并将其设置为true来手动将扩展名列入黑名单。这将阻止应用程序加载扩展程序。
以下是黑名单扩展的示例:
"jbofmngeodhmdlnicmlnfhjmmbdbcokh": {
"title": "app 1",
"description": "desc 1",
"custom_app_setting_stored_below": "asd",
"cust1": 3,
"cust2": false,
"icons": {
"128": "text21456.gif",
"16": "text21456.gif",
"48": "text21456.gif"
},
"plugins": [
{
"path": "plugins/ApiPlugin.dll",
"public": true
},
{
"path": "plugins/mp.dll",
"public": true
},
{
"path": "plugins/Plugin.dll",
"public": true
}
],
"blacklist": true
}
现在我希望能够以编程方式将扩展名列入黑名单 在C#中,我正在搜索这样的特定扩展名:
var data = json["data"];
var app_settings = data["app_settings"];
var a = app_settings.Children().ToList();
foreach (var b in a)
{
if (b.ToString().ToLower().Contains("extensionname"))
{
JToken ext = b;
// need to add blacklist property here
}
}
例如,如果搜索匹配,我可能在ext
中有类似的内容:
"jbofmngeodhmdlnicmlnfhjmmbdbcokh": {
"custom_extension_property_1": "value 1",
"custom_extension_property_2": "value 2"
}
如何在这些扩展程序设置中添加“黑名单”布尔属性,以便它看起来像这样?
"jbofmngeodhmdlnicmlnfhjmmbdbcokh": {
"custom_extension_property_1": "value 1",
"custom_extension_property_2": "value 2",
"blacklist": true
}
我认为这不会起作用:
bool blacklist = true;
ext.AddAfterSelf(blacklist);
或者这个:
someobject o = new someobject() {
blacklist = true;
};
ext.AddAfterSelf(o);
我错过了什么?
答案 0 :(得分:0)
根据您的问题,您似乎试图通过其标题查找特定扩展名,然后在找到标题时为该扩展程序的设置添加“黑名单”属性。你可以这样做:
string extensionNameToBlacklist = "app 1";
var data = json["data"];
var app_settings = data["app_settings"];
foreach (JProperty extensionProperty in app_settings)
{
JObject extensionObject = (JObject)extensionProperty.Value;
if ((string)extensionObject["title"] == extensionNameToBlacklist)
{
extensionObject.Add("blacklist", true);
}
}
小提琴:https://dotnetfiddle.net/tESgmB
我认为您缺少的部分是JToken
只是更具体的令牌类的基类,如JObject
和JProperty
。有时您必须强制转换JToken
才能访问特定于该类的方法和属性,例如JObject
上的Add
方法。 (如果你有一个令牌并且你不知道它是什么类型,你可以检查它的Type
属性来查找。)