我在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有点新鲜。
答案 0 :(得分:1)
您可以使用dynamic
类型。如果您的xml字段不会发生变化,您仍然可以使用.
运算符访问这些值。
此外,如果您不需要动态响应,则可以加载响应并遍历散列值并遍历散列值并解析子节点(已知数据结构)。