views:

40

answers:

1

I'm trying to serialize some XML. Normally, I would just create a class and use the System.Xml.Serialization.XmlSerializer however, in this case there are various issues like the a few link tags that are only different because of the rel='.

And so, I'm not sure how to serialize it and create the class for that. Any ideas? Here's a sample of the XML:

<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom"&gt;
  <id>tag:api.microsoft.com,2005:search/foo</id>
  <title>foo - microsoft Search</title>
  <link type="application/atom+xml" rel="next" href="http://api.microsoft.com/search?page=2&amp;amp;q=foo" />
  <link type="application/atom+xml" rel="self" href="http://api.microsoft.com/search?page=1&amp;amp;q=foo&amp;amp;since_id=1286331268264" />
  <link type="application/atom+xml" rel="refresh" href="http://api.microsoft.com/search?q=foo&amp;amp;since_id=1286331268264" />
  <link type="application/atom+xml" rel="after" href="http://api.microsoft.com/search?q=foo&amp;amp;after_id=1286322320913" />
  <opensearch:totalResults>1173</opensearch:totalResults>
  <opensearch:itemsPerPage>20</opensearch:itemsPerPage>
  <updated>2010-10-06T02:14:28Z</updated>

  <entry xmlns="http://www.w3.org/2005/Atom"&gt;
    <title>Comment on Eating in New Mexico Day 1 & 2 by Tricia</title>
    <link href="http://zmommyt.wordpress.com/2007/08/28/eating-in-new-mexico-day-1-2/#comment-126" type="text/html" rel="alternate" />
    <published>2007-08-29T01:52:00Z</published>
    <id>http://zmommyt.wordpress.com/2007/08/28/eating-in-new-mexico-day-1-2/#comment-126&lt;/id&gt;
    <updated>2007-08-29T01:52:00Z</updated>
    <language xmlns='http://api.microsoft.com/ns/search-0#results'&gt;blog&lt;/language&gt;
    <category xmlns='http://api.microsoft.com/ns/search-0#results'&gt;blog&lt;/category&gt;
    <abstract xmlns='http://api.microsoft.com/ns/search-0#results'&gt;&gt;
      <p>You&#8217;re making me hungry for green chile! I told my
      farmer last week that I was already missing it - unfortunately,
      his chiles won&#8217;t be ripe...  ...Sigh&#8230; I love
      that first picture! What great pictures.  Comment on Eating in
      New Mexico Day 1 & 2 by Tricia</p>
    </abstract>
  </entry>

  <entry xmlns="http://www.w3.org/2005/Atom"&gt;
    <title>Comment on Eating in New Mexico Day 1 & 2 by Tricia</title>
    <link href="http://zmommyt.wordpress.com/2007/08/28/eating-in-new-mexico-day-1-2/#comment-126" type="text/html" rel="alternate" />
    <published>2007-08-29T01:52:00Z</published>
    <id>http://zmommyt.wordpress.com/2007/08/28/eating-in-new-mexico-day-1-2/#comment-126&lt;/id&gt;
    <updated>2007-08-29T01:52:00Z</updated>
    <language xmlns='http://api.microsoft.com/ns/search-0#results'&gt;blog&lt;/language&gt;
    <category xmlns='http://api.microsoft.com/ns/search-0#results'&gt;blog&lt;/category&gt;
    <abstract xmlns='http://api.microsoft.com/ns/search-0#results'&gt;&gt;
      <p>You&#8217;re making me hungry for green chile! I told my
      farmer last week that I was already missing it - unfortunately,
      his chiles won&#8217;t be ripe...  ...Sigh&#8230; I love
      that first picture! What great pictures.  Comment on Eating in
      New Mexico Day 1 & 2 by Tricia</p>
    </abstract>
  </entry>
</feed>
+1  A: 

If you apply the XmlElementAttribute to your links collection property then XmlSerializer will deserialize them into an ordered collection for you.

[XmlRoot(Namespace = "http://www.w3.org/2005/Atom")]
public class feed
{
    [XmlElement("link")]
    public link[] link { get; set; }
}

public class link
{
    [XmlAttribute]
    public string type { get; set; }

    [XmlAttribute]
    public string rel { get; set; }

    [XmlAttribute]
    public string href { get; set; }
}
Nathan Baulch