C# 如何设计以提示用户为反序列化对象的属性输入新值?

C# 如何设计以提示用户为反序列化对象的属性输入新值?,c#,serialization,C#,Serialization,现在,我正在序列化一个类,如下所示: class Session { String setting1; String setting2; ...etc... (other member variables) List<SessionAction> actionsPerformed; } 课堂会话 { 字符串设置1; 字符串设置2; …等…(其他成员变量) 列出已格式化的操作; } 其中SessionAction是一个只有一个方法的接口。S

现在,我正在序列化一个类,如下所示:

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

     List<SessionAction> actionsPerformed;
}
课堂会话
{
字符串设置1;
字符串设置2;
…等…(其他成员变量)
列出已格式化的操作;
}
其中SessionAction是一个只有一个方法的接口。SessionAction接口的所有实现都具有描述特定SessionAction功能的各种属性

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


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

如果您从一开始就知道会话操作将包含哪些属性,则必须实现IDeserializationCallback,并将属性[NonSerialized]放在这些道具上。当您实现OnDeserialization方法时,您会从用户那里获得新的值。

关于信息,我不建议对长期存储的任何内容使用
BinaryFormatter
;这是非常重要的。对于短期消息,如果您知道相同版本将用于序列化和反序列化,则可以这样做

我会推荐以下任何一种:
XmlSerializer
DataContractSerializer
(3.0),或者对于快速二进制;所有这些都是基于契约的,因此版本容忍度更高


重新考虑这个问题;您可以对值类型使用
null
,对字符串使用
null
等,并请求输入空值?还有其他一些涉及
ShouldSerialize*
模式的路由,但这可能会打乱序列化API。

所以我想对于可为空的类型,我必须为我使用的任何序列化方法重写序列化方法?如果我这样做,我将如何支持两种形式的序列化(一种具有所有属性,另一种仅具有两种)?老实说,对于不同的必需参数束,我可能会有不同的请求DTO。