如何在 C# 中接收具有动态名称的 XMLRPC 数据结构

How to receive XMLRPC data structs with dynamic names in C#

我正在用 C# 实现 opensubtitles.com XMLRPC 接口。

方法之一returns数据这样:

[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
                )
)

如您所见,数据数组内部有一个数组,该数组动态获取返回的散列名称,以及与内部散列相关的 returns 个值。

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

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。但我确信散列存在于他们的服务器上,因为我使用了他们示例中的硬编码散列来确保测试工作正常。通话状态为“200 OK!”

该方法的名称是 "CheckMovieHash"。她 抱歉,我对 XMLRPC 有点陌生。

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

此外,如果不需要动态响应,可以加载响应并遍历 xml 通过哈希值并解析子项(已知数据结构)。