【问题标题】:how to serialize JSON object lists into file with c# not arrayc# - 如何将JSON对象列表序列化到文件中,而不是数组
【发布时间】:2021-03-25 14:20:05
【问题描述】:

我在这里有这段代码可以将一段 JSON 添加到文件中,但它没有使用 [] 来创建一个数组,从而破坏了我的文件的读取方式。

var serverid = ctx.Guild.Id.ToString();
List<data> _data = new List<data>();
_data.Add(new data() {
    mute = $"{Role.Name}"
});
string json = JsonConvert.SerializeObject(_data.ToList());
File.WriteAllText(@$".\serverconfigs\{serverid}.json", json);

【问题讨论】:

  • [{"mute":"CobraMute"}] 是我的意思
  • 那你为什么要序列化一个列表呢?直接序列化data对象即可。

标签: c# json json.net


【解决方案1】:

要创建不带方括号的 JSON,只需在序列化时省略列表即可:

var _data = new data() {
    mute = $"{Role.Name}"
};
string json = JsonConvert.SerializeObject(_data);
File.WriteAllText(@$".\serverconfigs\{serverid}.json", json);

这将生成:{"mute" : "CobraMute"} 假设 Role.NameCobraMute

【讨论】:

    【解决方案2】:

    这不是一个有效的 json。您需要创建一个带有数组的类。然后,当您序列化该类时,它将像这样被序列化:

    {"_data":[{"mute":"CobraMute"}]}

    在你的代码中,它会是这样的:

    class Program
    {
        YourClass myclass = new YourClass();
        myclass._data = new List<data>();
        myclass._data.Add(new data()
        {
            mute = $"{Role.Name}"
        });
        string json = JsonConvert.SerializeObject(myclass);
        File.WriteAllText(@$".\serverconfigs\{serverid}.json", json);
    }
    class YourClass{
        public List<data> _data;
    }
    

    【讨论】:

    • 应该澄清 [{"mute":"CobraMute"}] 是生成文件时返回的内容,但我只想要{"mute" : "CobraMute"}
    • 所以不要序列化列表,只序列化对象本身。
    • 那就改用JsonConvert.SerializeObject(_data[0])吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多