You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台应用使用序列化存取变量加载为空问题咨询

问题解答

  • 存值时可以直接用变量名赋值,你当前写的存值代码完全符合要求,不是存值方式导致的加载失败。
  • 加载后变量为空的核心原因:你仅完成了存档文件到stateVariables对象的反序列化操作,没有把stateVariables中存储的属性值同步回业务逻辑使用的静态变量。和你已经实现的装备、药水、经验变量赋值逻辑一致,其他游戏数值相关的静态变量也需要手动从stateVariables中读取赋值。

修正后的加载代码示例

string folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
folder = Path.Combine(folder, "RNGgameSaveFiles");
Directory.CreateDirectory(folder);
string dataFile = Path.Combine(folder, "RNGgameSaveFileV1");
if (File.Exists(dataFile))
{
    using (Stream stateStream = File.OpenRead(dataFile))
    {
        BinaryFormatter deserializer = new BinaryFormatter();
        stateVariables = (AppState)deserializer.Deserialize(stateStream);
        // 同步静态变量值
        roundsPlayed = stateVariables.roundsPlayed;
        money = stateVariables.money;
        totalMoneyEarned = stateVariables.totalMoneyEarned;
        totalScore = stateVariables.totalScore;
        totalKills = stateVariables.totalKills;
        totalLosses = stateVariables.totalLosses;
        // 原有已实现的变量赋值
        equipedShield = stateVariables.equipedShield; 
        equipedWeapon = stateVariables.equipedWeapon; 
        healthPotionCount = stateVariables.healthPotionCount; 
        playerExpEarned = stateVariables.playerExpEarned;
        // 其他AppState中定义的属性如果有对应静态变量,在此处补充赋值即可
    }
}

额外优化建议

BinaryFormatter存在已知的安全风险,微软官方已不推荐用于生产环境。后续迭代时可以改用JSON序列化方案,序列化后的存档为明文结构,调试更方便,安全性也更高。


内容的提问来源于stack exchange,提问作者noobyprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:01