在c#中正确创建一个json文件

Correctly create a json file in c#

我目前正在设置我的应用程序,我需要在我的 windows 表单中管理一个 json 文件(其中包含一些设置)。一旦你打开它,你可以很容易地选择不同的设置,一旦你完成了,你可以保存它(这意味着我需要覆盖现有的 json 文件设置,并用新的替换它!


我试图按照 this 指南正确创建我的 json 文件!但是我遇到了两个问题:

  1. 上面提到的这个解决方案,创建方括号(我不需要!)
  2. 似乎在一行中创建了所有设置。这是正确的还是将来会出现问题?

一些资料....

我的申请:

原始json文件:

Json 使用我的代码生成的文件:

我的class:

    public class data
    {
        public bool avx { get; set; }
        public bool memory_pool { get; set; }
        public bool smt { get; set; }
        public bool spectre { get; set; }
        public bool unlock_menu { get; set; }
        public bool vinput { get; set; }
        public double cpu_memory_pool_fraction { get; set; }
        public double gpu_memory_pool_fraction { get; set; }
    }

我的代码:

private void btn_save_Click(object sender, EventArgs e)
{
    string settings_path = general_path + "\plugins\cyber_engine_tweaks\" + "config.json"; //path

    bool avx_set = cb_avx.Checked;
    bool smt_set = cb_smt.Checked;
    bool memory_set = cb_memory.Checked;
    bool spectre_set = cb_spectre.Checked;
    bool debug_set = cb_debug.Checked;
    bool vinput_set = cb_vinput.Checked;

    List<data> _data = new List<data>();
    _data.Add(new data()
    {
        avx = avx_set,
        cpu_memory_pool_fraction = 0.5,
        gpu_memory_pool_fraction = 1.0,
        memory_pool = memory_set,
        smt = smt_set,
        spectre = spectre_set,
        unlock_menu = debug_set,
        vinput = vinput_set
    });

    using (StreamWriter file = File.CreateText(settings_path))
    {
        JsonSerializer serializer = new JsonSerializer();
        //serialize object directly into file stream
        serializer.Serialize(file, _data);
    }
}
  1. 方括号是因为你发送的是一个数组:
    代替 List<data> _data = new List<data>(); _data.Add(new data()...
    尝试 var data = new data()... serializer.Serialize(file, data)

  2. 一行所有设置正常

这里的回答非常好:Can JSON start with "["?

TLDR:

  1. 如果没有 {} 表示对象或 [] 表示数组,则不是 Json。所以不,你不能有一个 json 有多个键而没有一个。
  2. 换行符在 Json 中是可选的。由于大多数 json 对象用于通过网络传输,因此不需要换行符(占用不必要的字节)。

问题: 1.上面提到的这个解决方案,创建方括号(我不需要!)

解决方案:

像这样创建数据对象:

        //List<data> _data = new List<data>();
        data _data = new data 
        { 
            avx = avx_set,
            cpu_memory_pool_fraction = 0.5,
            gpu_memory_pool_fraction = 1.0,
            memory_pool = memory_set,
            smt = smt_set,
            spectre = spectre_set,
            unlock_menu = debug_set,
            vinput = vinput_set
        };

2。似乎在一行中创建所有设置。这是正确的还是将来会出现问题?

解决方法: 我认为这是一个格式问题。可以忽略