我使用C#中的XML-RPC.NET库来调用服务器上的XML-RPC方法。当一切正常时,该方法返回一个字符串,但当发生错误时,它返回一个XmlRpcStruct。
当我得到的返回类型与我在方法签名中指定的类型不同时,XML-RPC.NET抛出异常:
string login(string username, string password);异常消息:"response contains struct value where string expected“
在XML-RPC.NET的文档中,它这样写道:
“如何指定其类型直到运行时才知道的数据?
有时,直到运行时才知道参数、返回值或结构成员的类型。在这个场景中,应该使用System.Object数据类型。对于返回值,可以在运行时确定实际类型并进行适当处理。“
因此,我将返回类型更改为object,现在它可以工作了。然而,现在我不知道如何处理返回值。如果它的类型是XmlRpcStruct,我不想把它转换成我的Error类。否则,我会将其视为字符串。如何将其转换为Error类?XML-RPC-NET是否有convert方法或我可以调用的东西?
public interface Proxy : IXmlRpcProxy
{
[XmlRpcMethod("login")]
object login(string username, string password);
}
// When the login method fails I get an XmlRpcStruct that has a
// key "status" with a string value. I'd like to cast the returned
// XmlRpcStruct to my Error class. How?
public class Error : XmlRpcStruct
{
public string status;
}然后当我调用这个方法时:
object ret = proxy.login("admin", "1234");
Type t = ret.GetType();
if (t == typeof(XmlRpcStruct))
{
// This will set err to null even though ret is not null
// How do I convert it?
Error err = ret as Error;
}
else
{
string result = (string)ret;
}有没有更简单的方法来做这件事?我可以将我的方法设置为字符串的返回类型,然后对方法调用执行try/catch操作,但随后我丢失了在错误中返回的状态消息。
发布于 2012-09-28 04:29:47
如果您的错误类包含一个XmlRpcStruct变量,该怎么办:
public class Error
{
public string status;
public XmlRpcStruct xmlstr;
}然后,您可以将XmlRpcStruct赋值给Error对象的变量:
object ret = proxy.login("admin", "1234");
Type t = ret.GetType();
if (t == typeof(XmlRpcStruct))
{
Error err = new Error();
err.xmlstr = (XmlRpcStruct)ret;
}
else
{
string result = (string)ret;
}而且,您仍然可以通过Error类的变量访问原始XmlRpcStruct,而不会被try语句丢失。也许有一种更好的方法可以通过继承来实现这一点,但这是一个快速修复方法。
https://stackoverflow.com/questions/12628510
复制相似问题