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”]}
我想修改json的一些值。 int或string工作得很好。 但是,列表或数组不起作用 请给我一个好的意见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数据已经定义了对象模板,您可以基于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);
}