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

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() {

我想在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);
        }
    }
公共抽象类设置库
{
[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,它就不工作了