XmlSerializer:如何允许属性反序列化,然后阻止它序列化?

时间:2010-08-09 20:35:42

标签: .net xml-serialization xml-deserialization

也就是说,我希望我的数据采用单向方式 - 输入类,但在序列化操作期间阻止它保存。什么是最好的方法呢?

3 个答案:

答案 0 :(得分:2)

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

修改

这是Ani的样本,格式化,只需更改一次:

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

[XmlElement("Password")]
public string SerializablePassword
{
  get { return null; }
  set { Password = value; }
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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,它什么也不返回。

相关问题