C# 如何在现有JSON字符串中追加节点?

C# 如何在现有JSON字符串中追加节点?,c#,C#,我有一个JSON字符串,如下所示 { "Filename":"mypage.html", "Info":{ "title":{ "Name":"title", "Values":[ "This is title" ], "NumericValues":[ ], "DateTimeValues":[ ], "LinkedComponentValues":[ ], "F

我有一个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"
  }
 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不仅仅是一个“字符串”。它是对象的字符串表示形式。因此,解决“字符串”中的问题不会解决下划线问题。