I am trying to deserialize an Atom xml generated by one of the internal systems. However, when I try:
    public static MyType FromXml(string xml)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MyType ));
        return (MyType) serializer.Deserialize(new StringReader(xml));
    }
it throws an exception on the definition of the namespace:
System.InvalidOperationException: <feed xmlns='http://www.w3.org/2005/Atom'> was not expected.
When I add the namespace to the constructor of the XmlSerializer, my object is completely empty:
    public static MyType FromXml(string xml)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MyType ), "http://www.w3.org/2005/Atom");
        return (MyType) serializer.Deserialize(new StringReader(xml)); //this will return an empty object
    }
Any ideas how can I get it to work?
It is hard to investigate this without being able to look at how your object model ties to the xml (i.e. samples of each); however, you should be able to do something like:
[XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")]
public class MyType {...}
As a limited atom example (which works fine with some sample atom I have "to hand"):
class Program
{
    static void Main()
    {
        string xml = File.ReadAllText("feed.xml");
        XmlSerializer serializer = new XmlSerializer(typeof(MyType));
        var obj = (MyType)serializer.Deserialize(new StringReader(xml));
    }
}
[XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")]
public class MyType
{
    [XmlElement("id")]
    public string Id { get; set; }
    [XmlElement("updated")]
    public DateTime Updated { get; set; }
    [XmlElement("title")]
    public string Title { get; set; }
}
                        You may debug the XML serialization by adding this to the app.config
<system.diagnostics>
  <switches>
    <add name="XmlSerialization.Compilation" value="1" />
  </switches>
</system.diagnostics>
In your temp-folder, C# files for the serializer are generated and you can open up these in VS for debugging.
Also have a look at the XmlNamespaceManager (even for default namespaces).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With