【问题标题】:XML-RPC struct to C# class with dynamic named structsXML-RPC 结构到具有动态命名结构的 C# 类
【发布时间】: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# 中,并将其用作合法的类。
  • 再试一次,我忘记撤消我之前的试验了。

标签: c# struct xml-rpc


【解决方案1】:

您是否尝试过使用 Paste-Special 为您生成类?

https://stackoverflow.com/a/14700981/112397


从你的 xml 生成的 c# 很糟糕,但我可以看到它试图做什么,你尝试过这样的事情吗?

编辑:我认为您可能缺少继承级别。

public class Item
{
    public string ItemID;
}

public class OrderItem
{
    public Item[] Items;
}

public class OrderItems 
{
   public OrderItem[] OrderItem;
}

public class OrderData
{
    public int OrderID;
    public OrderItems OrderItems;
}

当我阅读 this answer 时,您的数组评论让我印象深刻,以为我会自己生成该代码,看看是否看到类似的东西。

【讨论】:

  • 我不知道它的存在——它非常酷!但遗憾的是并不能很好地解决问题。
  • 是的,我已经尝试了各种方法来让它运行,它总是以相同或相似的错误消息响应。是的,称它为 XML 有点牵强!可悲的是,XML-RPC 是强加给我的,请随时给我 Soap 或 WCF!
  • 刚刚在您的编辑中发现了您的链接,是的,这就是我想到嵌套数组并尝试的地方。问题是每个 OrderItem 中的名称不同(数组索引)。我认为它在挣扎,因为 XmlRpcLight 框架是名称匹配的......您链接中的响应来自编写 XMLRPC.Net 的查尔斯库克,XmlRpcLight 是从这个代码派生的,但是一个更轻的框架。一切都指向一个事实,即目前不可能。
  • 欣赏建议...但是在 orderdata 级别使用数组会产生此错误:请求包含预期数组的结构值(作为类型 OrderItems[])[请求:参数 2:结构映射到类型Order : 成员 OrderItems 映射到类型 OrderItems[]]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
相关资源
最近更新 更多