1

也就是说,我希望我的数据采用一种方式 - 输入一个类,但随后防止它在序列化操作期间保存。最好的方法是什么?

4

3 回答 3

2

最简单的方法是序列化一个Set正确执行但始终返回一个固定的假值 on的属性Get。例如,如果该属性被调用Password,您将创建一个SerializablePassword符合上述设计的属性,而不是序列化原始属性。

编辑

这是 Ani 的示例,已格式化,但有一处更改:

[XmlIgnore]
public string Password { get; set; }

[XmlElement("Password")]
public string SerializablePassword
{
  get { return null; }
  set { Password = value; }
}
于 2010-08-09T20:46:25.507 回答
1

如果您喜欢完全控制序列化过程,您可以实现接口ISerializable

还要实现特殊的构造函数。

编辑:我的意思是IXmlSerializable。谢谢约翰。

于 2010-08-09T20:39:29.357 回答
0

好的,我尝试了这个return null;建议,但它不起作用;它无法反序列化。但是,这里有一个解决方法:

public List<Program> Programs
{
    get
    {
        System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(true);
        for (int i = 0; i < stackTrace.FrameCount; i++)
        {
            if ("XmlSerializationWriterApplication".Equals(stackTrace.GetFrame(i).GetMethod().ReflectedType.Name))
            {
                return null;
            }
        }
        return programs;
    }
    set { programs = value; }
}

虽然性能可能不是很好,但它会检查 StackTrace 以查看谁调用了get- 如果它是 Serializer/Writer,它什么也不返回。

于 2010-08-10T13:18:22.093 回答