如何在 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 通过哈希值并解析子项(已知数据结构)。
我正在用 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 通过哈希值并解析子项(已知数据结构)。