保存/加载数据

问题描述 投票:0回答:1

你好,我正在尝试为学校项目制作一个 cookie 点击器,但我不知道如何将多个数据保存到你的程序中,你可以在此处的 c# WPF 下找到保存/加载数据

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    var OpgeslagenData = "opslag.txt";
    using(StreamWriter sw = File.CreateText(OpgeslagenData))
    {
        sw.WriteLine(globaleDingen.koekjes);
        sw.WriteLine(globaleDingen.aantalUpgraded);
        sw.WriteLine(globaleDingen.klick);
        sw.WriteLine(globaleDingen.upgrade);
        sw.WriteLine(globaleDingen.goldBars);
    }
}

private void btnLoad_Click(object sender, RoutedEventArgs e)
{
    int koekjes;
    int aantalUpgraded;
    int klick;
    int upgrade;
    int goldBars;
    var OpgeslagenData = "opslag.txt";
    using(StreamReader sr = File.OpenText(OpgeslagenData))
    {
        koekjes = Convert.ToInt32(sr.ReadLine().ElementAt(1));
        aantalUpgraded = Convert.ToInt32(sr.ReadLine().ElementAt(2));
        klick = Convert.ToInt32(sr.ReadLine().ElementAt(3));
        upgrade = Convert.ToInt32(sr.ReadLine().ElementAt(4));
        goldBars = Convert.ToInt32(sr.ReadLine().ElementAt(5));

    }
    globaleDingen.koekjes = koekjes;
    globaleDingen.aantalUpgraded = aantalUpgraded;
    globaleDingen.klick = klick;
    globaleDingen.upgrade = upgrade;
    globaleDingen.goldBars = goldBars;
}

我希望有人能帮助我

c# wpf saving-data
1个回答
0
投票

使用现有的序列化格式,这允许库自动将对象与串行表示形式相互转换。有些基于文本的格式(例如 json 或 xml)是人类可读的,并且往往会使调试问题变得更加容易。或者二进制格式,如 protobuf,往往可以提供更好的大小和性能。

如果您只想保存和加载一小块数据,我建议使用 system.text.json:

public class WeatherForecastDTO
{
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    public string? Summary { get; set; }
}
public void Example()
{
    var weatherForecast = new WeatherForecastDTO
    {
        Date = DateTime.Parse("2019-08-01"),
        TemperatureCelsius = 25,
        Summary = "Hot"
    };

    var fileName = "WeatherForecast.json";
    using (var fs = File.Create(fileName))
    {
        JsonSerializer.Serialize(fs, weatherForecast);
    }

    using (var fs = File.OpenRead(fileName))
    {
        var deserialized = JsonSerializer.Deserialize<WeatherForecastDTO>(fs);
    }
}

您经常希望将用于序列化的类与包含实际逻辑的类分开,这有时称为“数据传输对象”(DTO)。此类对象通常需要公共 getter 和 setter,以及无参数构造函数。

您通常还可以使用属性和设置来控制对象的序列化方式。

另一种选择是数据库,可能是像 SQLite 这样的嵌入式数据库。通常与“对象关系映射器”(ORM) 一起进行对象到数据库行的转换。请参阅实体框架入门。数据库使用起来有点复杂,但如果您需要处理大量对象,往往可以提供更好的扩展。

© www.soinside.com 2019 - 2024. All rights reserved.