我在 C# 中使用库 XML-RPC.NET 在我的服务器上调用 XML-RPC 方法。当一切正常时,该方法返回一个字符串,但当发生错误时,它返回一个 XmlRpcStruct。
当我得到不同于我在方法签名中指定的返回类型时,XML-RPC.NET 引发了异常:
string login(string username, string password);
异常消息:“响应包含预期字符串的结构值”
在 XML-RPC.NET 的文档中它是这样说的:
“我如何指定直到运行时才知道类型的数据?
有时,直到运行时才知道参数、返回值或结构成员的类型。在这种情况下,应使用 System.Object 数据类型。对于返回值,实际类型可以在运行时确定并适当处理。”
所以我将返回类型更改为对象,现在它可以工作了。但是现在我不知道如何处理返回值。如果它是 XmlRpcStruct 类型,我不想将它转换为我的错误类。否则我把它当作一个字符串。如何将其转换为我的错误类?XML-RPC-NET 是否有转换方法或我可以调用的方法?
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;
}
有没有更简单的方法来做到这一点?我可以将我的方法设置为字符串的返回类型,然后尝试/捕获方法调用,但随后我丢失了错误中返回的状态消息。