How to deserialize an element as an XmlNode?

Posted by mackenir on Stack Overflow See other posts from Stack Overflow or by mackenir
Published on 2010-04-19T10:08:47Z Indexed on 2010/04/19 10:13 UTC
Read the original article Hit count: 347

Filed under:
|
|

When using Xml serialization in C#, I want to deserialize a part of my input XML to an XmlNode.

So, given this XML:

<Thing Name="George">
  <Document>
    <subnode1/>
    <subnode2/>
  </Document>
</Thing>

I want to deserialize the Document element to an XmlNode.

Below is my attempt which given the XML above, sets Document to the 'subnode1' element rather than the 'Document' element.

How would I get the code to set the Document property to the Document element?

using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

[Serializable]
public class Thing
{
  [XmlAttribute] public string Name {get;set;}
  public XmlNode Document { get; set; }
}

class Program
{
  static void Main()
  {
    const string xml = @"
<Thing Name=""George"">
  <Document>
    <subnode1/>
    <subnode2/>
  </Document>
</Thing>";
    var s = new XmlSerializer(typeof(Thing));
    var thing = s.Deserialize(new StringReader(xml)) as Thing;
  }
}

However, when I use an XmlSerializer to deserialize the XML above to an instance of Thing, the Document property contains the child element 'subnode1', rather than the 'doc' element.

How can I get the XmlSerializer to set Document to an XmlNode containing the 'doc' element.

© Stack Overflow or respective owner

Related posts about c#

Related posts about Xml