如何序列化Json文件中的T类型



我想把一个模型的信息保存在Json文件中。我想用一种可以轻松存储不同模型的方式来实现它。所以我使用了这个方法:

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);
}
}

Json文件:

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);
}
}

现在我可以这样使用:

var xx = SettingBase.Load<AppModel>();
xx.boo = true;
xx.integ = 25;
xx.str = "sss";
xx.Save();

问题是没有执行保存操作,json文件中没有保存任何内容如何解决这个问题?

很遗憾,.NET Core当前不支持此功能。可能在.NET 6.0中支持。您必须使用newtonsoft.json

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)
}