I did not try to use DataContractSerializer with specialized XML formats, but the XmlSerializer allows you to set the attribute and element. This is the easiest way, as far as I can tell, because you can create a beautiful object model and use it to read any XML. Here's a PRIVATE example of reading an atom feed. You will need to do an HttpWebRequest to get the XML (which is pretty straight forward) and then use the XmlSerializer to deserialize the feed.
[XmlType(TypeName = "feed", Namespace = "http://www.w3.org/2005/Atom")] public class Feed { [XmlElement(ElementName = "title")] public string Title { get; set; } [XmlElement(ElementName = "updated")] public DateTime? Updated { get; set; } [XmlElement(ElementName = "id")] public string Id { get; set; } [XmlElement(ElementName = "link")] public Link Link { get; set; } [XmlElement(ElementName = "entry")] public List<Entry> Entries { get; set; } public Feed() { Entries = new List<Entry>(); } } public class Entry { [XmlElement(ElementName = "title")] public string Title { get; set; } [XmlElement(ElementName = "updated")] public DateTime? Updated { get; set; } [XmlElement(ElementName = "id")] public string Id { get; set; } [XmlElement(ElementName = "link")] public Link Link { get; set; } [XmlElement(ElementName = "summary")] public string Summary { get; set; } } public class Link { [XmlAttribute(AttributeName = "href")] public string Href { get; set; } }
Here is a working example for writing / reading a feed:
class Program { static void Main(string[] args) { Feed feed = new Feed(); feed.Title = "Exmple Feed"; feed.Updated = DateTime.Now; feed.Link = new Link { Href = "http://example.org/" }; feed.Entries.Add( new Entry { Title = "Atom-Powered Robots Run Amok", Link = new Link { Href = "http://example.org/2003/12/13/atom03" }, Updated = DateTime.Now, Summary = "Some text." }); XmlSerializer serializer = new XmlSerializer(typeof(Feed), "http://www.w3.org/2005/Atom"); using (StreamWriter sw = new StreamWriter("c:\\testatom.xml")) { serializer.Serialize(sw, feed); } using (StreamReader sr = new StreamReader("c:\\testatom.xml")) { Feed readFeed = serializer.Deserialize(sr) as Feed; } } }
source share