在C#中的json文件中追加数据

时间:2017-04-20 20:32:11

标签: c# json

我如何继续追加数据? 我有这个:

{
  "13232": [
    "2012952"
  ]
}

我想添加另一个对象,例如:

{
  "13232": [
    "2012952"
  ],
  "19213": [
    "2016086"
  ]
}

这是我使用的代码:

JArray array = new JArray();
array.Add(Itemid);

JObject o = new JObject();
o[Userid] = array;

string json = o.ToString(Formatting.Indented);
//i know this keeps appending text but how would i append it inside the { and }?
File.AppendAllText("E:/media.json", json);

我真的不知道如何继续添加它,但也许其他人有?

3 个答案:

答案 0 :(得分:5)

您将无法使用文件追加操作来执行此操作。文件追加操作只能添加文本到最后,它们不能在中间的某个位置插入文本。这使得无法使用file-append来保持JSON有效。

我有两个选择:

  1. 将整个文件读入对象,添加对象,然后 重写整个文件(性能不佳)
  2. 打开文件读/写,解析 直到你到达结束大括号,然后写下剩下的 数据,然后写出紧密的大括号(不是琐碎的)

答案 1 :(得分:1)

我建议您使用Newtonsoft Json lib,作为nuget包提供。

您可以创建一个模型类来表示json节点,然后您可以将Json反序列化为该模型,并在末尾构建一个包含新元素的数组,然后将其重新序列化为json。 / p>

请查看此MSDN页面:https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

修改:Actual NewtonSoft Documentation

步骤:1 Deserialize the collection

2:一个带有listName.Add(className);

的新类实例

3:Reserialize the collection

答案 2 :(得分:0)

最安全的方法是read-update-rewrite(适用于JSON和XML格式,因为它们不支持附加)。

下一个选项如果您可以使用无效的JSON,只需将JSON片段与您拥有的代码连接起来,而不是使用SupportMultipleContent中的JsonReader来读取片段Read Multiple Fragments With JsonReader

如果这些方法不起作用并且您的格式已修复 - 找到文件中最后]的位置,请在那里搜索流并编写新的数组元素并附加]}