C# 如何序列化Json文件中的T类型
我想在Json文件中保存一个模型的信息,我想以一种可以轻松存储不同模型的方式实现它,所以我使用了以下方法:C# 如何序列化Json文件中的T类型,c#,json,generics,serialization,C#,Json,Generics,Serialization,我想在Json文件中保存一个模型的信息,我想以一种可以轻松存储不同模型的方式实现它,所以我使用了以下方法: public abstract class SettingBase { [JsonIgnore] public abstract string Filename { get; } public static T Load<T>() where T : SettingBase, new() {
public abstract class SettingBase
{
[JsonIgnore]
public abstract string Filename { get; }
public static T Load<T>() where T : SettingBase, new()
{
T result = new T();
result = JsonFile.Load<T>(result.Filename) ?? result;
return result;
}
public void Save()
{
JsonFile.Save(Filename, this);
}
}
公共抽象类设置库
{
[JsonIgnore]
公共抽象字符串文件名{get;}
公共静态T Load(),其中T:SettingBase,new()
{
T结果=新的T();
result=JsonFile.Load(result.Filename)??结果;
返回结果;
}
公共作废保存()
{
Save(文件名,this);
}
}
JsonFile:
public static class JsonFile
{
public static void Save<T>(string fileName, T @object)
{
using (StreamWriter writer = File.CreateText(fileName))
{
string json = JsonSerializer.Serialize(@object);
writer.Write(json);
}
}
public static T Load<T>(string fileName)
{
using (StreamReader reader = File.OpenText(fileName))
{
string json = reader.ReadToEnd();
return JsonSerializer.Deserialize<T>(json);
}
return default(T);
}
}
公共静态类JsonFile
{
公共静态无效保存(字符串文件名,T@object)
{
使用(StreamWriter=File.CreateText(文件名))
{
字符串json=JsonSerializer.Serialize(@object);
Write.Write(json);
}
}
公共静态T加载(字符串文件名)
{
使用(StreamReader=File.OpenText(文件名))
{
字符串json=reader.ReadToEnd();
返回JsonSerializer.Deserialize(json);
}
返回默认值(T);
}
}
现在我可以这样使用:
var xx = SettingBase.Load<AppModel>();
xx.boo = true;
xx.integ = 25;
xx.str = "sss";
xx.Save();
var xx=SettingBase.Load();
xx.boo=true;
xx.整数=25;
xx.str=“sss”;
xx.Save();
问题是没有执行保存操作,json文件中没有保存任何内容
如何解决此问题?公共静态无效保存(字符串文件名,T@object)
public static void Save<T>(string fileName, T @object)
{
var json = JsonSerializer.Serialize(@object);
System.IO.File.WriteAllText(fileName, json);
}
public static T Load<T>(string fileName)
{
var json = System.IO.File.ReadAllText(fileName);
return JsonSerializer.Deserialize<T>(json)
}
{
var json=JsonSerializer.Serialize(@object);
System.IO.File.WriteAllText(文件名,json);
}
公共静态T加载(字符串文件名)
{
var json=System.IO.File.ReadAllText(文件名);
返回JsonSerializer.Deserialize(json)
}
不幸的是,.NET Core当前不支持此功能。可能在.NET 6.0中也支持此功能。您必须使用newtonsoft.json与以前相同的结果,如果我使用Newton.json库,它可以正常工作,但是如果我在.Net Core中使用system.Text.json,它就不工作了