如何在C#中使用动态名称接收XMLRPC数据结构

时间:2015-04-13 22:30:15

标签: c# struct xml-rpc

我在C#中实现了opensubtitles.com XMLRPC接口。

其中一种方法以这种方式返回数据:

[data] => Array
        (
            [46e33be00464c12e] => Array
                (
                    [MovieHash] => 46e33be00464c12e
                    [MovieImdbID] => 2816136
                    [MovieName] => "Game of Thrones" Two Swords
                    [MovieYear] => 2014
                    [MovieKind] => episode
                    [SeriesSeason] => 4
                    [SeriesEpisode] => 1
                    [SeenCount] => 19823
                    [SubCount] => 217
                )
)

正如您所看到的,数据数组中有一个数组,它动态地获取返回的哈希的名称,并返回与该哈希内部相关的值。

这是它的另一种表现形式:

struct(
    struct( <-- list of movie info structures
      struct( <-- movie information structure (movieinfo)
        (string) [MovieHash],
        (string) [MovieImdbID],
        (string) [MovieName],
        (string) [MovieYear]
      ) [<video file hash>],
      struct( movieinfo ) [<video file hash>],

      ... more movie information structures go here (if any) ...

    ) [data],

这是XML表示:

     <member>
      <name>data</name>
      <value>
       <struct>
        <member>
         <name>d7aa0275cace4410</name>
         <value>
          <struct>
           <member>
            <name>MovieHash</name>
            <value><string>d7aa0275cace4410</string></value>
           </member>
           <member>
            <name>MovieImdbID</name>
            <value><string>371746</string></value>
           </member>
           <member>
            <name>MovieName</name>
            <value><string>Iron Man</string></value>
           </member>
           <member>
            <name>MovieYear</name>
            <value><string>2008</string></value>
           </member>
          </struct>

          ... more movie information structures go here (if any) ...

         </value>
        </member>
       </struct>
      </value>
     </member>

问题是当我无法创建预定义的结构来将值映射到它时,如何接收这样的结构,因为名称是动态的?它现在的方式,我将它映射到一个名为movieinfo的结构,其中包含所有字段,但它返回null到所有内容。但我确信他们的服务器上存在哈希,因为我使用了他们的例子中的硬编码来确保测试工作正常。通话状态为&#34; 200 OK!&#34;

方法的名称是&#34; CheckMovieHash&#34;。她很抱歉我对XMLRPC有点新鲜。

1 个答案:

答案 0 :(得分:1)

您可以使用dynamic类型。如果您的xml字段不会发生变化,您仍然可以使用.运算符访问这些值。

此外,如果您不需要动态响应,则可以加载响应并遍历散列值并遍历散列值并解析子节点(已知数据结构)。