【发布时间】:2016-05-15 04:17:42
【问题描述】:
我正在尝试将 XML-RPC 结构映射到 C# 类。我正在使用来自 github 的 XmlRpcLight。下面是正在传递的 XML-RPC:
<?xml version=""1.0"" encoding=""ISO-8859-1""?>
<methodCall>
<methodName>namespace.method</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>OrderID</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>OrderItems</name>
<value>
<struct>
<member>
<name>0</name>
<value>
<struct>
<member>
<name>ItemID</name>
<value>
<string>12345</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>1</name>
<value>
<struct>
<member>
<name>ItemID</name>
<value>
<string>23456</string>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
我用来尝试映射的类如下:
public class OrderItem
{
public string ItemID;
}
public class OrderItems
{
public OrderItem[] OrderItem;
}
public class OrderData
{
public int OrderID;
public OrderItems OrderItems;
}
我收到的错误信息如下。
请求包含缺少非可选成员的结构值:OrderItem [请求:参数 2:结构映射到 OrderData 类型:成员 OrderItems 映射到 OrderItems 类型:结构映射到 OrderItems 类型]
我不知道如何映射它,因为订单商品名称是一个动态数字。我已经尝试过数组,数组数组,但似乎没有什么可以让它通过。我让它工作的唯一方法是使用 XmlRpcStruct 类型代替“OrderItems”的自定义类。虽然这行得通,但这不是我想要的结果。
谁能帮我理解这些 XMl-RPC 类型如何映射到 C#?
提前非常感谢!
【问题讨论】:
-
还有一个 .Net 的 xml-rpc 包装器:xml-rpc.net
-
是的,通读一遍,它谈论的是数组,而不是结构数组……那部分特别小——非常令人沮丧!
-
SO 的评论说只使用动态类型呢?
-
动态类型是一个很好的建议,但它映射到一个 XmlRpcStruct,它是一个键值对 - 如果一切都失败了,我最终将不得不使用它,但我想了解那个结构看起来像在 c# 中,并将其用作合法的类。
-
再试一次,我忘记撤消我之前的试验了。