C# 如何在现有JSON字符串中追加节点?
我有一个JSON字符串,如下所示C# 如何在现有JSON字符串中追加节点?,c#,C#,我有一个JSON字符串,如下所示 { "Filename":"mypage.html", "Info":{ "title":{ "Name":"title", "Values":[ "This is title" ], "NumericValues":[ ], "DateTimeValues":[ ], "LinkedComponentValues":[ ], "F
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
我正在对JSON输入字符串进行如下去搜索
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
var outputobject= JsonConvert.DeserializeObject(input);
现在,我想使用C#在输入JSON字符串中添加一个新节点(,位于信息中的标题之后)
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
添加节点后,我想将对象重新序列化为字符串。
我面临着在Info节点下的输入json字符串中添加新节点的问题。我只是举个小例子。但我的输入JSON字符串很大,它有不同的结构。但它是有效的JSON
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
我的最终JSON应该如下所示。
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
"description":{
"Name":"description",
"Values":[
"This is description"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
这是我正在尝试的,我需要在“信息”中添加。请注意,我不是在创建模型或生成输入JSON。我得到一个输入JSON作为字符串。在获取JSON字符串之后,我需要在“Info”中附加一个属性(描述)
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
var-inputobject=JsonConvert.DeserializeObject(输入);
变量说明=新说明
{
Name=“Description”,
值=新列表{“这是说明”},
NumericValues=新列表(),
DateTimeValues=新列表(),
LinkedComponentValues=新列表(),
FieldType=0,
关键字值=新列表(),
};
变量descriptionObject=JObject.FromObject(描述);
var测试=JObject.FromObject(inputobject);
测试。添加(“描述”,描述对象);
问候,,
Jey您可以使用它来修改JSON
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
始终确保viewmodels代表您希望作为最终输出获得的内容
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
首先改变你的课程,如下所示
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
public class JsonRoot
{
public string Filename { get; set; }
public Info Info { get; set; }
public string Id { get; set; }
public string Title { get; set; }
}
public class Info
{
public Title title { get; set; }
public Description description { get; set; }
}
public class Title
{
public string Name { get; set; }
public string[] Values { get; set; }
public object[] NumericValues { get; set; }
public object[] DateTimeValues { get; set; }
public object[] LinkedComponentValues { get; set; }
public int FieldType { get; set; }
}
public class Description
{
public string Name { get; set; }
public string[] Values { get; set; }
public object[] NumericValues { get; set; }
public object[] DateTimeValues { get; set; }
public object[] LinkedComponentValues { get; set; }
public int FieldType { get; set; }
}
{
"Filename": "mypage.html",
"Info": {
"title": {
"Name": "Some name",
"Values": [
"sdfs",
"dfgdf"
],
"NumericValues": [
1,
2,
43
],
"DateTimeValues": [
"2016-09-28T09:57:52.1513109+10:00"
],
"LinkedComponentValues": [
"34555",
"678786"
],
"FieldType": 5
},
"description": {
"Name": "MyInfo",
"Values": [
"some values"
],
"NumericValues": [
1,
2,
3,
4,
5
],
"DateTimeValues": [
"2016-09-28T09:57:52.1498114+10:00",
"2016-09-27T23:57:52.1508118Z"
],
"LinkedComponentValues": [
"ABC",
"XYZ"
],
"FieldType": 1
}
},
"Id": "123",
"Title": "This is my page"
}
然后使用这个测试类测试json
{
"Filename":"mypage.html",
"Info":{
"title":{
"Name":"title",
"Values":[
"This is title"
],
"NumericValues":[
],
"DateTimeValues":[
],
"LinkedComponentValues":[
],
"FieldType":0
}
},
"Id":"123",
"Title":"This is my page"
}
public class MyJsonTest
{
public void TestNewJson()
{
var root = new JsonRoot()
{
Filename = "mypage.html",
Id = "123",
Title = "This is my page",
Info = new Info()
{
description =
new Description()
{
DateTimeValues = new object[] { DateTime.Now, DateTime.UtcNow },
FieldType = 1,
LinkedComponentValues = new object[] { "ABC", "XYZ" },
Name = "MyInfo",
NumericValues = new object[] { 1, 2, 3, 4, 5 },
Values = (new List<string> { "some values" }).ToArray(),
},
title = new Title()
{
FieldType = 5,
NumericValues = new object[] { 1, 2, 43 },
Values = new string[] { "sdfs", "dfgdf" },
Name = "Some name",
LinkedComponentValues = new object[] {"34555", "678786"},
DateTimeValues = new object[] {DateTime.Now},
},
},
};
var json = JsonConvert.SerializeObject(root);
Console.WriteLine(json);
}
如果它位于
标题
属性之后,那又有什么关系呢?你只是在制造一个物体。属性的顺序(不是“节点”)根本不重要。我同意。。对于一个对象,顺序并不重要。你能将你想要的最终json添加到你的问题中吗?@Kosala,我已经添加了所需的最终输出。请参阅下面的答案。你好,Win,我需要在“信息”中添加。我可以像你一样添加对象,这是最后一个,这不是问题。此外,在“信息”下,我将获得比我指定的更多的属性,我不知道属性列表及其名称。因此,我无法创建定义的模型。在取消JSON输入的搜索之后,我需要识别“Info”,并在“Info”中添加另一组属性。我可以使用JObject创建描述对象。我面临的问题是,如何在“Info”中插入description对象?在没有看到您的代码的情况下,我说不出来。这可能与我在问题中所做的相同。您正在创建一个description对象并将其添加到itemobject中,itemobject将添加到JSON的末尾。我能做到。我的问题是不确定如何在“Info”中添加我的description对象,而不是我需要在“Info”中添加的itemobject(这意味着,不是JSON的结尾)。请注意,我不是在创建模型或生成输入JSON。我得到一个输入JSON作为字符串。在获得JSON字符串后,我需要在“Info”中添加一个属性(Description)。您是说需要在“Info”中添加“Description”吗?我知道您不是在生成输入json,而是在尝试创建输出json。这就是我想帮你的。您可能知道,json不仅仅是一个“字符串”。它是对象的字符串表示形式。因此,解决“字符串”中的问题不会解决下划线问题。