8

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?

2 Answers 2

13

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; }
}
Sign up to request clarification or add additional context in comments.

Comments

5

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).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.