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

Posted

技术标签:

【中文标题】在c#中正确创建一个json文件【英文标题】:Correctly create a json file in c# 【发布时间】:2021-03-26 20:23:26 【问题描述】:

我目前正在设置我的应用程序,我需要在我的 Windows 窗体中管理一个 json 文件(包含一些设置)。打开后,您可以轻松选择不同的设置,完成后,您可以保存它(这意味着我需要覆盖现有的一个 json 文件设置,并用新的设置替换它!


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

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

一些材料......

我的申请:

原始json文件:

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

我的班级:

    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&lt;data&gt; _data = new List&lt;data&gt;(); _data.Add(new data()... 尝试 var data = new data()... serializer.Serialize(file, data)

    一行的所有设置都是正常的。

【讨论】:

嗨@Volodymyr_UA,编译器现在向我显示一个错误:"'data' is a variable but is used like a type" @Zenek 我重新创建了您的代码,但没有发现错误。【参考方案2】:

这里非常详细的答案:Can JSON start with "["?

TLDR:

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

【讨论】:

【参考方案3】:

问题: 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 。似乎在一行上创建所有设置。这是正确的还是将来可能会造成一些问题?

解决方案: 我觉得是格式问题。可以忽略

【讨论】:

感谢@Presad Ramireddy 的回复!不幸的是,这个解决方案对我不起作用(或者我可能错过了什么?)编译器告诉我这个错误:The type or namespace name 'data' could not be found (are you missing a using directive or an assembly reference?) 这里的“数据”是一个引用 tobject,它是您的“数据”类,即: public class data public bool avx get;放; 公共布尔内存池 获取;放; 公共布尔 smt 获取;放; 公共布尔幽灵 得到;放; public bool unlock_menu 得到;放; 公共布尔 vinput 获取;放; 公共双 cpu_memory_pool_fraction 得到;放; 公共双 gpu_memory_pool_fraction 得到;放; 是的,我知道,但我不明白为什么在课程正确设置和工作时我仍然会收到此错误...您对此有任何想法吗?

以上是关于在c#中正确创建一个json文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 的 mysql 数据创建 Json 文件

创建 C# 代码以从 json 文件中获取值

如何在 Ionic 中正确读取 JSON 文件?

在 c# (Unity) 中解析 JSON 文件

未正确读取 JSON 文件

如何仅使用 JavaScript 正确读取 json 文件 [重复]