C# 如何在作业对象中添加或更新JProperty值

C# 如何在作业对象中添加或更新JProperty值,c#,json,json.net,C#,Json,Json.net,我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此任务(或至少是其中的一个子集)。如果Json.NET中没有任何内容,那么推荐的流程是什么,或者如何更改下面的代码以更接近推荐的流程 public static partial class ExtensionMethods { public static JObject SetPropertyContent(this JObject source, string name, object content)

我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此任务(或至少是其中的一个子集)。如果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
,是为了能够链接调用(对这个扩展的多个调用或者对其他方法和扩展的多个调用)

i、 e


正如注释中所描述的@dbc,您可以简单地使用索引器来实现这一点

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

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

有关更多详细信息,请参见

任何试图访问嵌套JSON的人都可以使用答案中的方法,根据需要添加额外的大括号

JObject item = JObject.Parse("{
   "test": {
       "first": "one",
       "second": "two",
       "nth":   "n"
   }
}");
要编辑:

item["test"]["nth"] = "updated";
将作业对象更新为:

{
   "test": {
       "first": "one",
       "second": "two",
       "nth":   "updated"
   }
}

?你如何知道你所做的是错误的。。?或者不正确听起来像是codereview是你想要的代码review是这听起来像的。bh,我还没有codereview的负责人,有没有一个简单的方法把它移到那里?你可以只做
source[name]=JToken.FromObject(content)
,它会根据需要添加或设置它。太好了。但是,如果我想通过LINQ添加或更新,我应该怎么做?我假设您只需要
foreach
您的枚举表,并使用上述解决方案添加或更新枚举表中的每个元素。
{
   "test": {
       "first": "one",
       "second": "two",
       "nth":   "updated"
   }
}