2015-05-06 2 views
3

В настоящее время я использую следующий метод расширения для выполнения этой задачи, но похоже, что для выполнения этого может быть какой-то существующий включенный метод или расширение (или, по крайней мере, подмножество этого). Если в ничего нет, Json.NET, то какой рекомендуемый процесс или как изменить код ниже, чтобы быть ближе к рекомендуемому процессу.Как добавить или обновить значение JProperty в объекте JObject

public static partial class ExtensionMethods 
{ 
    public static JObject SetPropertyContent(this JObject source, string name, object content) 
    { 
     var prop = source.Property(name); 

     if (prop == null) 
     { 
      prop = new JProperty(name, content); 

      source.Add(prop); 
     } 
     else 
     { 
      prop.Value = JContainer.FromObject(content); 
     } 

     return source; 
    } 
} 

Я могу подтвердить приведенный выше код работает для основного использования, но я не уверен, насколько хорошо он держит до более широкого использования.

Причина, по которой у меня есть это расширение, возвращающее JObject, заключается в том, что вы сможете цеплять вызовы (либо несколько вызовов этого расширения, либо другим методам и расширениям).

т.е.

var data = JObject.Parse("{ 'str1': 'test1' }"); 

data 
    .SetPropertyContent("str1", "test2") 
    .SetPropertyContent("str3", "test3"); 

// { 
// "str1": "test2", 
// "str3": "test3" 
// } 
+0

http://codereview.stackexchange.com/? –

+0

Откуда вы знаете, что то, что вы делаете, «неправильно»? или не правильно »звучит как codereview - это то, что вы хотите – MethodMan

+0

обзор кода - это то, что это звучит – MethodMan

ответ

10

, как @dbc описан в комментариях, вы можете просто использовать индексатор, чтобы это произошло.

var item = JObject.Parse("{ 'str1': 'test1' }"); 

item["str1"] = "test2"; 
item["str3"] = "test3"; 

см fiddle для более подробной информации

+0

Отлично. Но если я хочу добавить или обновить LINQ, что мне делать? –

+0

Я предполагаю, что вы просто 'foreach' перечислите и используете вышеуказанное решение для добавления или обновления каждого элемента в вашем перечисляемом. – pjs

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