I wanted to deserialize an XML message containing an element that can be marked nil="true"
into a class with a property of type int?
. The only way I could get it to work was to write my own NullableInt
type which implements IXmlSerializable
. Is there a better way to do it?
I wrote up the full problem and the way I solved it on my blog.
I think you need to prefix the nil="true" with a namespace in order for XmlSerializer to deserialise to null.
MSDN on xsi:nil
The exceptionally lazy way to do it. It's fragile for a number of reasons but my XML is simple enough to warrant such a quick and dirty fix.
My fix is to pre-process the nodes, fixing any "nil" attributes:
I couple this with a recursive search for child nodes, so that for any given XmlNode (or XmlDocument), I can issue a single call before deserialization. If you want to keep the original in-memory structure unmodified, work with a Clone() of the XmlNode.