6

私はrestsharpを使用していますが、問題が発生しました。xml データを返す Google API を使用しているため、名前の競合が発生しています。

たとえば、Google 連絡先 API からすべての「グループ」と「すべての連絡先」を返すには、両方とも「フィード」のルート ノードがありますが、その中には異なるデータがあります。

だから私はこれをやった

[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; }
}

XmlRoot 属性を使用すると、restsharp を使用するときに機能しますが、データであってもエントリにデータが入力されることはありません。

[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; }

}

GroupEntry の名前を Entry に変更すると、入力されます。私の XMLRoot 属性を名前として使用していないようです。

ご覧のとおり、私も XmlElement を使用してみましたが、それは何もしません。

  client.ExecuteAsync<GroupFeed>(request, response =>
            {
                var test = response.Data;
                var d = "";
            });

これが役立つかどうかわからない未加工の XML を次に示します。

 <?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>junk@gmail.com</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>junk@gmail.com</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>
4

1 に答える 1

1

配列内の要素を指定するには、XmlElement の代わりに XmlArrayItem を使用します。

//[XmlArray("Entries")] // if you need to change property name
[XmlArrayItem("Entry")]
public List<GroupEntry> Entries { get; set; }
于 2013-03-31T11:14:42.127 に答える