我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此操作(或至少是其中的一部分)。如果 Json.NET 中没有任何内容,那么推荐的流程是什么,或者我如何更改下面的代码以更接近推荐的流程。
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 :(得分:24)
作为评论中描述的@dbc,你可以简单地使用索引器来实现这一点。
var item = JObject.Parse("{ 'str1': 'test1' }");
item["str1"] = "test2";
item["str3"] = "test3";
有关详细信息,请参阅fiddle
答案 1 :(得分:3)
任何尝试访问嵌套JSON的人都会使用@pjs所要求的方法,方法是根据需要添加额外的花括号。
JObject item = JObject.Parse("{
"test": {
"first": "one",
"second": "two",
"nth": "n"
}
}");
要编辑:
item["test"]["nth"] = "updated";
将JObject更新为:
{
"test": {
"first": "one",
"second": "two",
"nth": "updated"
}
}