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