首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XML-RPC.NET中,如何处理类型直到运行时才知道的返回值?

在XML-RPC.NET中,如何处理类型直到运行时才知道的返回值?
EN

Stack Overflow用户
提问于 2012-09-28 03:12:42
回答 1查看 2K关注 0票数 2

我使用C#中的XML-RPC.NET库来调用服务器上的XML-RPC方法。当一切正常时,该方法返回一个字符串,但当发生错误时,它返回一个XmlRpcStruct。

当我得到的返回类型与我在方法签名中指定的类型不同时,XML-RPC.NET抛出异常:

代码语言:javascript
复制
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方法或我可以调用的东西?

代码语言:javascript
复制
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;
}

然后当我调用这个方法时:

代码语言:javascript
复制
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操作,但随后我丢失了在错误中返回的状态消息。

EN

回答 1

Stack Overflow用户

发布于 2012-09-28 04:29:47

如果您的错误类包含一个XmlRpcStruct变量,该怎么办:

代码语言:javascript
复制
public class Error
{
    public string status;
    public XmlRpcStruct xmlstr;
}

然后,您可以将XmlRpcStruct赋值给Error对象的变量:

代码语言:javascript
复制
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语句丢失。也许有一种更好的方法可以通过继承来实现这一点,但这是一个快速修复方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12628510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档