C# 在C语言中序列化窗体及其所有数据#

C# 在C语言中序列化窗体及其所有数据#,c#,serialization,savestate,C#,Serialization,Savestate,我猜最好的方法是使用XML。这就是问题所在,tho: Hero hero; PictureBox heroPB; Dictionary <string,Point> pokedex; Boss boss; PictureBox bossPB; Attack attack; PictureBox attackPB; HPMeter bossHP; PictureBox bossHPPB; PPMeter h

我猜最好的方法是使用XML。这就是问题所在,tho:

    Hero hero;
    PictureBox heroPB;
    Dictionary <string,Point> pokedex;
    Boss boss;
    PictureBox bossPB;
    Attack attack;
    PictureBox attackPB;
    HPMeter bossHP;
    PictureBox bossHPPB;
    PPMeter heroPP;
    PictureBox heroPPPB;

    System.Timers.Timer animateAttack;
    System.Timers.Timer animateBoss;
    System.Timers.Timer checkHit;
    System.Timers.Timer winFade;
    Thread tr;
    Rectangle bossRect;
    Rectangle attackRect;
    Panel whiteout;

    int heroState = 2;
    int stepRate = 5;
    int attackDirection;
    int attackLoop = 0;
    int contadorPaso = 0;
    int contadorPasoBoss = 0;
    int bossTop, bossLeft;
    int bossState = 6;
    int bossHealth = 0;
    int bossHPCap = 0;
    int opa = 0;
    int battlesWon = 0;
    int mainBossCounter = 0;
    int ppleft = 0;
    bool paso = false;
    bool inStadium = false;
    bool fading = true;
    bool fightingMainBoss = false;
    bool fainted;
    string currentPokemon = "";

    Rectangle[] frames;
    Rectangle[] entrances;
    PictureBox[] boundaries;
    Random r;
    Random eth;

    public delegate void BeginFade();
    BeginFade fade;
英雄;
PictureBox heroPB;
pokedex字典;
老板;
图文箱bossPB;
攻击;
PictureBox攻击PB;
HPM波什;
图片盒;
ppp;
PictureBox Heroppppb;
System.Timers.Timer animateAttack;
System.Timers.Timer动画框;
System.Timers.Timer checkHit;
System.Timers.Timer winFade;
螺纹tr;
矩形凸柱;
矩形攻击;
面板白化;
int-heroState=2;
int阶跃率=5;
int攻击方向;
int attackLoop=0;
int contadorPaso=0;
int contadorPasoBoss=0;
博斯勒夫特博斯托普酒店;
int-bossState=6;
int-bossHealth=0;
int-bossHPCap=0;
int opa=0;
int SWON=0;
int Main BossCenter=0;
int-ppleft=0;
bool-paso=false;
bool inStadium=false;
布尔衰落=真;
bool FIGHTINGMAIN BOSS=错误;
布尔晕倒了;
字符串currentPokemon=“”;
矩形[]帧;
矩形[]入口;
图文框[]边界;
随机r;
随机eth;
公共委托void BeginFade();
开始褪色;

我有不止几个不断变化的对象/基本体。是否有一种有效的方法来序列化整个内容并在下次程序运行时加载它?

确实没有简单的方法来保存这些数据。我个人认为XML不是最好的途径。这对物体是好的,对其他一切都是坏的。我更倾向于将其编写为JSON,并使用一个包含所有单独原语的“misc”对象。实际上,我最倾向于制作自己的配置文件读写器,并编写更像csv的东西。在我工作的地方,大多数配置文件都至少有这么多的数据。我们对所有原语使用
key=value
。每个对象都有自己的部分,其中它们的原语以
key=value
格式列出,列表为
key=value1、value2、value3
。我个人认为这是一种相当简单的方法,编写reader/writer类不需要很长时间。事实上,从头开始创建一个简单的读写器可能比在JSON或XML序列化类上构建一个读写器要快。我看不出这两种格式对您有多大好处。

为什么要序列化实际的表单?只要存储了所有数据,就不需要表单。@MikeParkhill,因为这是存储数据最安全的方法。我不想在保存和加载过程中遗漏任何东西。我的两分钱就是将所有数据重构成一个主视图模型对象,然后保存和加载。只要所有表单元素都绑定到该对象,您就安全了。我同意@MikeParkhill的观点,从长远来看,您最好将这些值存储在一个模型对象中,该模型对象可以轻松地持久化和再水化,而不是将值存储在表单中。当您第一次需要对数据进行版本设置以处理应用程序的更新时,这一点尤其明显。