【发布时间】:2015-04-11 05:46:19
【问题描述】:
我有一个包含一些公共成员的类,其中包含有关当前应用程序状态的一些数据。我使用的框架定义了一些未标记为可序列化的数据结构 - 让我们以 Vector3 为例。
当我尝试序列化我的程序数据时,出现错误 - Vector3 未标记为可序列化。
[System.Serializable]
public class ProgramData
{
public Vector3 test;
public bool test2;
}
我可以为这个类定义我自己的序列化来解决这个问题 -
[System.Serializable]
public class ProgramData : ISerializable
{
public Vector3 test;
public bool test2;
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("testx", test.x);
info.AddValue("testy", test.y);
info.AddValue("testz", test.z);
info.AddValue("test2", test2);
}
protected ProgramData(SerializationInfo si,
StreamingContext context)
{
test = new Vector3((float)si.GetDouble("testx"), (float)si.GetDouble("testy"), (float)si.GetDouble("testz"));
test2 = si.GetBoolean("test2");
}
}
这很好用,但维护起来很痛苦,因为现在我必须告诉它如何序列化/反序列化整个类 - 我必须在扩展数据类时维护 GetObjectData 和受保护的构造方法。这是不切实际的。
相反,我想告诉我的程序如何反序列化“Vector3”,并让它在遇到 Vector3 时使用这些指令。
【问题讨论】:
标签: c# serialization binaryformatter