将自定义类序列化为文件

时间:2017-08-25 11:14:12

标签: c# .net serialization

我正在为我的Player类编写一个保存方法,我可以使用二进制编写器序列化大多数字段但是我的自定义类字段无法序列化(我有自定义竞赛的Race字段)< / p>

由于我将有很多不同的自定义类 - 比如Race--我真的需要一种保存这些信息的可靠方法。

那么,我使用了错误的格式化程序吗?如果是这样,我应该使用的是什么? 或者,如何编写序列化方法?我已经使用了[Serializable()]属性并在必要时已经实现了ISerializable接口。

以下是代码:

public void Save()
{
    Stream stream = File.Open(SaveSlot, FileMode.Create);
    BinaryWriter writer = new BinaryWriter(stream);
    PlayerData saveData = new PlayerData();

    writer.Write(saveData.Name = PlayerData.player.Name);
    writer.Write(saveData.Race = PlayerData.player.Race);
    writer.Write(saveData.PlayClass = PlayerData.player.PlayClass);
    writer.Write(saveData.Level = PlayerData.player.Level);
    writer.Write(saveData.Experience = PlayerData.player.Experience);
    writer.Write(saveData.Strength = PlayerData.player.Strength);
    writer.Write(saveData.Dexterity = PlayerData.player.Dexterity);
    writer.Write(saveData.Constitution = PlayerData.player.Constitution);
    writer.Write(saveData.Intelligence = PlayerData.player.Intelligence);
    writer.Write(saveData.Wisdom = PlayerData.player.Wisdom);
    writer.Write(saveData.Charisma = PlayerData.player.Charisma);
    writer.Write(saveData.Wounds = PlayerData.player.Wounds);
    writer.Write(saveData.MaxWounds = PlayerData.player.MaxWounds);
    writer.Write(saveData.Attackbonus = PlayerData.player.Attackbonus);
    writer.Write(saveData.Defensebonus = PlayerData.player.Defensebonus);

    writer.Close();
    Console.WriteLine("Data Saved Successfully");
}

1 个答案:

答案 0 :(得分:2)

就像我在评论中所说,你可以使用json格式。

示例类

public class MyObject
{
    public string MyProperty { get; set; }
}

示例数据

List<MyObject> objects = new List<MyObject>
{
    new MyObject{MyProperty = "test 1"},
    new MyObject{MyProperty = "test 2"},
    new MyObject{MyProperty = "test 3"}
};

示例代码

然后,您可以使用此代码序列化您的数据(使用Newtonsoft)。

string json = JsonConvert.SerializeObject(objects);

json的内容将是

  

[{&#34; MyProperty&#34;:&#34; test 1&#34;},{&#34; MyProperty&#34;:&#34; test 2&#34;},{&#34 ; myProperty的&#34;:&#34;测试   3&#34;}]

如果要反序列化字符串,请使用此。

List<MyObject> deserialzed = JsonConvert.DeserializeObject<List<MyObject>>(json);

更多信息

您可以将json字符串保存到文件中,并在需要时加载和反序列化它。这适用于所有类型的属性,包括列表和自定义对象。

请阅读JSON format以获取更多信息。