C# 如何更改json';要在c中列出(或数组)的s值类型# Newtonsoft.Json.Linq; //json “标题”:{“新标题”:“测试”} “标记”:{“newTags”:[“Tag1”,“Tag2”]} //csharp var json=JObject.Parse(json:json); var title;//标题中的“Test2” 列出标签;//标签中的“TagA”、“TagB”、“TagC” json[“title”][“newTitle”]=title;//效果很好 json[“标记”][“新标记”]=标记;//不行 //我想要这个 “标题”:{“newTitle”:“Test2”} “tags”:{“newTags”:[“TagA”、“TagB”、“TagC”]}

C# 如何更改json';要在c中列出(或数组)的s值类型# Newtonsoft.Json.Linq; //json “标题”:{“新标题”:“测试”} “标记”:{“newTags”:[“Tag1”,“Tag2”]} //csharp var json=JObject.Parse(json:json); var title;//标题中的“Test2” 列出标签;//标签中的“TagA”、“TagB”、“TagC” json[“title”][“newTitle”]=title;//效果很好 json[“标记”][“新标记”]=标记;//不行 //我想要这个 “标题”:{“newTitle”:“Test2”} “tags”:{“newTags”:[“TagA”、“TagB”、“TagC”]},c#,json,C#,Json,我想修改json的一些值。 int或string工作得很好。 但是,列表或数组不起作用 请给我一个好的意见 我用了一个翻译。因此,编写可能会很麻烦。假设您的JSON数据已经定义了对象模板,您可以基于JSON数据创建一个类。使用Newtonsoft.Json,将Json反序列化为对象,然后更新对象的属性值 注意:当访问对象的内部属性时,例如Title.NewTitle和Tags.NewTags,您可能需要添加一些空检查以防止NullReferenceException 第一个解决方案:转换为强类型

我想修改json的一些值。 int或string工作得很好。 但是,列表或数组不起作用

请给我一个好的意见


我用了一个翻译。因此,编写可能会很麻烦。

假设您的JSON数据已经定义了对象模板,您可以基于JSON数据创建一个类。使用
Newtonsoft.Json
,将Json反序列化为对象,然后更新对象的属性值

注意:当访问对象的内部属性时,例如
Title.NewTitle
Tags.NewTags
,您可能需要添加一些空检查以防止
NullReferenceException

第一个解决方案:转换为强类型对象

Newtonsoft.Json.Linq;

// json
"title" : { "newTitle" : "Test"}
"tags" : { "newTags" : ["Tag1", "Tag2"] }

// csharp
var json = JObject.Parse(json: json);
var title;  // "Test2" in title
List<string> tags; // "TagA", "TagB", "TagC" in tags


json["title"]["newTitle"] = title; // works well
json["tags"]["newTags"] = tags; // not work

// i want this json
"title" : { "newTitle" : "Test2"}
"tags" : { "newTags" : ["TagA", "TagB", "TagC"] }

谢谢您的回答。但这与我的意图完全不同。我将获取一些不固定的JSON值并修改它们。JSON有数百个变量,无法创建这样的类。您好@이현월, 我已经添加了第二个解决方案,它更新了
JArray
动态对象中的JSON对象。你可以看看。谢谢,太酷了!你的代码很好!谢谢你的好意。多亏了你,我才开阔了视野。不客气。如果此解决方案有助于解决您的问题,您也可以将其标记为答案。非常感谢。
public static void Main()
{
    var json = "{\"title\" : { \"newTitle\" : \"Test\"}, \"tags\" : { \"newTags\" : [\"Tag1\", \"Tag2\"] }}";
        
    var inputObj = JsonConvert.DeserializeObject<JsonInput>(json);
    inputObj.Title.NewTitle = "Test2";
    inputObj.Tags.NewTags = new List<string> {"TagA", "TagB", "TagC"};
        
    Console.WriteLine(JsonConvert.SerializeObject(inputObj));
}

public class JsonInput
{
    public Title Title {get;set;}
    public Tags Tags {get;set;}
}

public class Title
{
    public string NewTitle {get;set;}
}

public class Tags
{
    public List<string> NewTags {get;set;}
}
public static void Main()
{
    var json = "{\"title\" : { \"newTitle\" : \"Test\"}, \"tags\" : { \"newTags\" : [\"Tag1\", \"Tag2\"] }}";
        
    var title = "Test2";  // "Test2" in title
    List<string> tags = new List<string> {"TagA", "TagB", "TagC"}; // "TagA", "TagB", "TagC" in tags

    dynamic root = JObject.Parse(json);
    JObject titleObj = (JObject)root["title"];
    titleObj["newTitle"] = title;
        
    JObject tagsObj = (JObject)root["tags"];
    tagsObj["newTags"] = JArray.FromObject(tags);
        
    Console.WriteLine(root);
}