JSON向现有的jobobject添加节点



我试图添加一个新节点到现有的JSON JObject,但是当我添加它的格式不正确。它在整个节点周围添加引号,并将放在适当的位置。

背景:我正在加载一个JSON文件,做一些逻辑,然后添加一个节点回来。我想我可以这样做:

mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());

问题是这就是结果:

{
"JSONFile": [
  {
    "More": "Nodes",
    "InThe": "File"
  }
],
"Customers": "{"FirstName":"Mike","LastName":"Smith"},{"FirstName":"Jane","LastName":"Doe"}",
}

我知道我的JsonConvert.SerializeObject(MyObject)正在工作,如果我这样做:

string json = JsonConvert.SerializeObject(MyObject);
File.WriteAllText("myfile2.json" json);

结果如下:

[
  {
    "FirstName": "Mike",
    "LastName": "Smith"
  },
  {
    "FirstName": "Jane",
    "LastName": "Doe"
  }
]

我错过了什么?

编辑:

关注@Swagata Prateek的评论;

mainJson.Add("Customers",JObject.FromObject(MyObject));

类型为"System"的未处理异常。

Newtonsoft.Json.dll中出现ArgumentException

附加信息:对象序列化为数组。

我应该注意到MyObject是实际的ObservableCollection,如果这有区别

你能试一下吗?

mainJson.Add("NewNode", JObject.FromObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());

当你做JsonConvert.SerializeObject(MyObject)时,它序列化MyObject,在这个过程中你得到一个字符串。

当你给mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject));赋值时,你是在给NewNode赋值一个字符串。这样就得到了一个带引号的字符串,表示序列化的MyObject

:

如果您想将集合转换为JArray,

JArray.FromObject是您想要查找的方法。在这种情况下,段看起来像

mainJson.Add("NewNode", JArray.FromObject(obsColl));
File.WriteAllText("myfile.json", mainJson.ToString());
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            JObject tempvar= JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");
            string cpu = (string)tempvar["CPU"];          // Intel
            string firstDrive = (string)tempvar["Drives"][0];   // DVD read/writer
IList<string> allDrives = tempvar["Drives"].Select(t => (string)t).ToList();
            // DVD read/writer
            // 500 gigabyte hard drive
            tempvar["Drives"][0].AddAfterSelf("new node");
//tempvar json with new node
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新