如何设计提示用户获取反序列化对象属性的新值?

时间:2009-06-27 04:45:22

标签: c# serialization

现在,我正在序列化这样一个类:

class Session
{
     String setting1;
     String setting2;
     ...etc... (other member variables)

     List<SessionAction> actionsPerformed;
}

其中SessionAction是一个只有一个方法的接口。 SessionAction接口的所有实现都有各种属性来描述特定SessionAction的作用。

目前,我将其序列化为一个文件,可以使用默认的.Net二进制序列化程序再次加载。现在,我想将其序列化为模板。这个模板只是序列化到文件的SessionActions列表,但是在另一次将它加载到内存中时,我希望这些SessionActions的一些属性需要用户输入(我计划动态生成GUI控件)取决于属性类型)。现在,我一直坚持确定最好的方法。

有没有什么方法可以标记一些属性,以便在使用反射时,我可以确定哪些属性需要用户输入?或者我的其他选择是什么?如果有任何不清楚的地方,请随时发表评论。

2 个答案:

答案 0 :(得分:1)

有关信息,我建议您不要将BinaryFormatter用于长期存储的任何内容;它非常brittle between versions。对于短期消息,您可以使用相同的版本进行序列化和反序列化。

我会推荐以下任何一项:XmlSerializerDataContractSerializer(3.0),或快速二进制,protobuf-net;所有这些都是基于合同的,更多的版本容忍。

回答问题;您可以使用Nullable<T>之类的值来表示值类型,将null用于字符串等 - 并为那些空的请求输入?还有其他涉及ShouldSerialize*模式之类的路由,但这可能会扰乱序列化API。

答案 1 :(得分:0)

如果你从一开始就知道什么属性会有SessionAction,你必须实现IDeserializationCallback并将那些属性[NonSerialized]置于那些。实现OnDeserialization方法时,您将从用户处获取新值。