在c#中正确创建一个json文件
Correctly create a json file in c#
我目前正在设置我的应用程序,我需要在我的 windows 表单中管理一个 json 文件(其中包含一些设置)。一旦你打开它,你可以很容易地选择不同的设置,一旦你完成了,你可以保存它(这意味着我需要覆盖现有的 json 文件设置,并用新的替换它!
我试图按照 this 指南正确创建我的 json 文件!但是我遇到了两个问题:
- 上面提到的这个解决方案,创建方括号(我不需要!)
- 似乎在一行中创建了所有设置。这是正确的还是将来会出现问题?
一些资料....
我的申请:
原始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);
}
}
方括号是因为你发送的是一个数组:
代替
List<data> _data = new List<data>(); _data.Add(new data()...
尝试
var data = new data()... serializer.Serialize(file, data)
一行所有设置正常
这里的回答非常好:Can JSON start with "["?
TLDR:
- 如果没有
{}
表示对象或 []
表示数组,则不是 Json。所以不,你不能有一个 json 有多个键而没有一个。
- 换行符在 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。似乎在一行中创建所有设置。这是正确的还是将来会出现问题?
解决方法:
我认为这是一个格式问题。可以忽略
我目前正在设置我的应用程序,我需要在我的 windows 表单中管理一个 json 文件(其中包含一些设置)。一旦你打开它,你可以很容易地选择不同的设置,一旦你完成了,你可以保存它(这意味着我需要覆盖现有的 json 文件设置,并用新的替换它!
我试图按照 this 指南正确创建我的 json 文件!但是我遇到了两个问题:
- 上面提到的这个解决方案,创建方括号(我不需要!)
- 似乎在一行中创建了所有设置。这是正确的还是将来会出现问题?
一些资料....
我的申请:
原始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);
}
}
方括号是因为你发送的是一个数组:
代替List<data> _data = new List<data>(); _data.Add(new data()...
尝试var data = new data()... serializer.Serialize(file, data)
一行所有设置正常
这里的回答非常好:Can JSON start with "["?
TLDR:
- 如果没有
{}
表示对象或[]
表示数组,则不是 Json。所以不,你不能有一个 json 有多个键而没有一个。 - 换行符在 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。似乎在一行中创建所有设置。这是正确的还是将来会出现问题?
解决方法: 我认为这是一个格式问题。可以忽略