#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 не работает