2013-05-30 3 views
1

У меня есть JSON, который представляет настройки для приложения. Упрощенный пример приведен ниже:Как добавить логическое свойство в токен 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

обновлено и вопрос находится ниже сообщения –

ответ

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); 
    } 
} 

Fiddle: https://dotnetfiddle.net/tESgmB

Я думаю, что часть вы отсутствовали, что JToken только базовый класс для более конкретных классов лексем, как JObject и JProperty. Иногда вам нужно указать JToken, чтобы иметь доступ к методам и свойствам, характерным для этого класса, например, метод Add на JObject. (Если у вас есть токен, и вы не знаете, что это такое, вы можете проверить его имущество Type, чтобы узнать.)

Смежные вопросы