JSON将节点添加到现有JObject

时间:2016-09-06 14:57:43

标签: c# json json.net

我正在尝试向现有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.ArgumentException'发生在Newtonsoft.Json.dll

     

其他信息:对象序列化为Array。期望JObject实例。

我应该注意MyObject是实际ObservableCollection,如果这有所不同

2 个答案:

答案 0 :(得分:4)

你能尝试一下吗?

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());

答案 1 :(得分:1)

from django.db.models import Q
deliverySchedule = DeliverySchedule.objects.filter(Q(Status = 'cut off completed') | Q(Status = 'Active')).order_by('deliverySchedule')