Как сериализовать тип T в файле Json

#c# #json #generics #serialization

#c# #json #общие сведения #сериализация

Вопрос:

Я хочу сохранить информацию о модели в файле 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) ?? resu<    
            return resu<
        }

        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 ничего не сохраняется
Как решить эту проблему?

Ответ №1:

К сожалению, эта функция в настоящее время не поддерживается в .NET Core, вероятно, поддерживается в .Net 6.0. Вы должны использовать newtonsoft.json

Ответ №2:

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

Комментарии:

1. Тот же результат, что и раньше, сохранение не работает

2. вы получаете исключение

3. Я нашел кое-что интересное, если я использую Newton. библиотека json работает без проблем, но если я использую system.Text. Json в .Net Core не работает