开发者

XmlSerializer: How can I allow a property to deserialize, but then stop it from serializing?

That is, I'd like my data to go one way - feed into a class, but then prevent it from saving out during开发者_如何学JAVA a serialize operation. What's the best way to go about that?


The simplest way is to serialize a property that does Set correctly but always returns a fixed, fake value on Get. For example, if the property were called Password, you'd create a SerializablePassword property that fits the above design, while not serializing the original.

edit

Here's Ani's sample, formatted, with one change:

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

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


If you like the full control over the serialization process you can implement the interface ISerializable.

Also implement the special constructor.

EDIT: I meant IXmlSerializable. Thanks John.


Ok, I tried the return null; suggestion, but it doesn't work; it fails to deserialize. However, here's a workaround:

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; }
}

While probably not very performant, this examines the StackTrace to see who called the get - and if it's the Serializer/Writer, it returns nothing.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜