2013-03-21 7 views
6

Ich benutze Restharp und lief auf ein Problem. Da ich die Google API verwende, die XML-Daten zurückgibt, laufe ich in Namenskonflikte.Wie werden innere XML-Knoten mit RestSharp ausgeführt, wenn die Klasse einen anderen Namen hat?

Zum Beispiel alle "Gruppe" und "alle Kontakte" aus dem Google-Kontakt API zurückgegeben beide haben einen Stammknoten von "Feed", aber verschiedene Daten darin.

Also habe ich diesen

[XmlRoot(ElementName = "feed")] 
public class GroupFeed 
{ 
    public string Id { get; set; } 
    public DateTime Updated { get; set; } 
    public string Title { get; set; } 
    public int TotalResults { get; set; } 
    public int StartIndex { get; set; } 
    public int ItemsPerPage { get; set; } 
    [XmlElement(ElementName="Entry")] 
    public List<GroupEntry> Entries { get; set; } 
} 

die XmlRoot Durch die Verwendung von Attribut es funktioniert, wenn ich restsharp verwenden, aber es füllt nie Einträge obwohl ihre Daten.

[XmlRoot(ElementName = "entry")] 
public class GroupEntry 
{ 
    public string Id { get; set; } 
    public DateTime Updated { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 

} 

Wenn ich GroupEntry in Eintrag umbenennen, wird es ausgefüllt. Es sieht so aus, als würde mein XMLRoot-Attribut nicht als Name verwendet.

Wie Sie sehen können, habe ich auch versucht, XmlElement zu verwenden, aber das tut auch nichts.

Hier ist das rohe XML nicht sicher, ob dies helfen wird.

<?xml version="1.0" encoding="UTF-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005"> 
    <id>[email protected]</id> 
    <updated>2013-04-01T18:32:26.482Z</updated> 
    <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#group" /> 
    <title type="text">xiao bao's Contact Groups</title> 
    <link rel="alternate" type="text/html" href="http://www.google.com/" /> 
    <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full" /> 
    <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full" /> 
    <link rel="http://schemas.google.com/g/2005#batch" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full/batch" /> 
    <link rel="self" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full?max-results=25" /> 
    <author> 
     <name>xiao bao</name> 
     <email>[email protected]</email> 
    </author> 
    <generator version="1.0" uri="http://www.google.com/m8/feeds">Contacts</generator> 
    <openSearch:totalResults>2</openSearch:totalResults> 
    <openSearch:startIndex>1</openSearch:startIndex> 
    <openSearch:itemsPerPage>25</openSearch:itemsPerPage> 
    <entry> 
     <id>http://www.google.com/m8/feeds/groups/junk%40gmail.com/base/5a185f89922304</id> 
     <updated>2013-04-01T18:31:35.784Z</updated> 
     <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#group" /> 
     <title type="text">My Second Group</title> 
     <content type="text">My Second Group</content> 
     <link rel="self" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full/5a185f89922304" /> 
     <link rel="edit" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full/5a185f89922304/1364841095784001" /> 
    </entry> 
    <entry> 
     <id>http://www.google.com/m8/feeds/groups/junk%40gmail.com/base/37f569c88989718f</id> 
     <updated>2013-03-01T18:54:05.085Z</updated> 
     <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#group" /> 
     <title type="text">My Test Group</title> 
     <content type="text">My Test Group</content> 
     <link rel="self" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full/37f569c88989718f" /> 
     <link rel="edit" type="application/atom+xml" href="https://www.google.com/m8/feeds/groups/junk%40gmail.com/full/37f569c88989718f/1362164045085001" /> 
    </entry> 
</feed> 

Antwort

1

Verwenden Sie XmlArrayItem instad von XmlElement, um das Element im Array anzugeben.

//[XmlArray("Entries")] // if you need to change property name 
[XmlArrayItem("Entry")] 
public List<GroupEntry> Entries { get; set; } 
+0

Nein, das funktioniert nicht .... Noch eine Zählung von Null. – chobo2

+0

Sie haben eine ungültige Struktur in Ihrer GroupFeed-Klasse. Sie haben nur einen GroupEntry-Eintrag für jeden Feed in Ihrem XML-Code. GroupFeed sollte also folgendes haben: [XmlElement (ElementName = "entry")] public GroupEntry Entrie {get; einstellen; } anstelle von Einträgen. –

+0

Ich habe die XML-Datei veröffentlicht. Es kann mehr als einen Eintrag geben. – chobo2