【问题标题】:c# Add new entries to a Json File [duplicate]c#向Json文件添加新条目[重复]
【发布时间】:2016-05-16 13:22:59
【问题描述】:

我正在尝试将成员添加到 Json 文件,但我不知道如何将新成员添加到现有文件。

{
  "Members": {
    "Example1": {
      "LastOnline": "2016-05-16T12:09:04.6459345Z",
      "TimeUntillEx": "2016-05-16T12:09:04.6459345Z",
      "Paied": true
    },
  }
}

问题是“Example1”已经是用户名。我不知道我是否应该尝试添加更多或复制现有并编辑复制的文本。 希望有人能帮忙。

顺便说一句。我是新手,如有任何错误,请见谅

【问题讨论】:

  • 我认为您需要将 JSON 反序列化为模型,添加条目然后再次序列化。
  • +1 表示上面@FailedUnitTest 的答案。如果您正在处理纯文本,另一种选择可能是为对象构建模板并进行简单的占位符替换以添加新对象。

标签: c# json json.net


【解决方案1】:

首先,我要做的是将Members 属性更改为array,而不是object。然后,我会做这样的事情:

//original json. Notice that I added '[ ]' to make it an array
var json = "{ 'Members': " +
             "[ " +
                 "{'Example1': " +
                     "{ 'LastOnline': '2016-05-16T12:09:04.6459345Z', " +
                       "'TimeUntillEx': '2016-05-16T12:09:04.6459345Z', " +
                       "'Paied': true" +
                     "}, " +
                 "} " +
             "] " +
           "}";

//new member
var newMember = "{ 'Example2': " +
                    "{ 'LastOnline': '2016-12-16T12:09:04.6459345Z', " +
                      "'TimeUntillEx': '2016-12-16T12:09:04.6459345Z', " +
                      "'Paied': false" +
                    "}, " +
                "}";

//parse the json
var obj = JObject.Parse(json);

//get members array
var array = obj.GetValue("Members") as JArray;

//parse the new member and add it to the array
var add = JObject.Parse(newMember);

array.Add(add);

//serialize the json
var output = JsonConvert.SerializeObject(obj, Formatting.Indented);

//print the results
Console.WriteLine(output);

为此,您将需要

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

【讨论】:

  • 谢谢。这正是我所需要的!
  • 顺便说一句,是否还有一种简单的方法可以删除条目?
  • 当然@MarlonHaenen。首先,如果你喜欢这个答案,别忘了也给它点个赞。基本上是因为您使用的是Newtonsoft.Json.Linq。您有权像操作任何其他通用 C# 对象一样操作 JObjects 和 JArrays。所以,如果你想从数组中删除一些东西。我会去做类似的事情:array.RemoveAt(1); //这将删除我们刚刚添加的条目,或者您可以执行类似array.Remove(add); //这将删除我们刚刚添加的对象。不过不要忘记在最后对对象进行序列化。
  • 很遗憾我不能投票,因为我的声誉太低了 O.o
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2017-02-10
相关资源
最近更新 更多