【发布时间】:2013-09-13 11:50:30
【问题描述】:
我发现了类似的问题,但我仍然遇到问题:
-- 希望能更好地描述问题?----
当我调用 Web 服务时,返回的响应是一个 xml 文档。该文档定义了要返回的类,然后通过将 xml 反序列化为 8 种不同类型中的 1 种来设置所有值。
现在当我执行receipt.Item 时,我得到了返回的类型;但是由于使用 Web 服务调用设置接口的方式,除非我键入 cast receipt.Item,否则我无法访问任何项目成员变量。这是通过开关盒完成的。但我希望在开关盒之外创建对象并在开关盒内对其进行初始化,以便稍后在代码中访问它。这就是为什么我不在 switch case 中创建该类型的新对象并在那里工作(或调用函数)的原因。
我有一个来自我正在调用的 Web 服务的总体返回类型 Response,并且该 Web 服务可以有 8 种不同的结果类型。我需要创建可以返回的 8 种返回类型中的 1 种的实例。
所以这是一个更直观的结构
Response
accountUpdaterRespType
endOfDayRespType
flexCacheRespType
响应对象的代码:
public partial class Response {
private object itemField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("AccountUpdaterResp", typeof(accountUpdaterRespType))]
[System.Xml.Serialization.XmlElementAttribute("EndOfDayResp", typeof(endOfDayRespType))]
[System.Xml.Serialization.XmlElementAttribute("FlexCacheResp", typeof(flexCacheRespType))]
public object Item {
get {
return this.itemField;
}
set {
this.itemField = value;
}
}
}
当我得到 Response 的返回对象时,我可以通过执行 responseObject.Item 并在其上执行 GetType() 来获取类型。这就是我可以尝试输入新对象的方法。
我必须这样做,因为当我执行responseObject.Item 时,我无法访问不同对象类型中的不同变量。所以我试图在开关盒中输入一个新对象,如下所示:
object newReceipt = Receipt.GetType(); //this is where I would get the type I assume?? I don't know
string type = Receipt.Item.GetType().ToString();
switch (type)
{
case "accountUpdaterRespType":
newReceipt = (accountUpdaterRespType)Receipt.Item;
break;
case "endOfDayRespType":
newReceipt = (endOfDayRespType)Receipt.Item;
break;
case "flexCacheRespType":
newReceipt = (flexCacheRespType)Receipt.Item;
break;
}
【问题讨论】:
-
很难理解你的问题。您是否正在尝试创建该类的新实例?如果是,为什么不在 switch 语句中创建它?
-
另外,不同的响应类型是否相似,以便您可以创建每个响应类型都实现的接口?在这种情况下,您可以尝试将您的方法实现为泛型方法并使用 default 关键字。
-
它们在某种意义上是相似的,一些(可能是 3 个)返回类型值是相同的,但绝大多数(超过 15 个)不是。另外@Dilshod 我正在尝试提出更好的解释。
-
那么响应类型没有实现相同的变量或函数?每个响应类型中都没有变量(比如说 StatusCode)?另外,您是否需要响应类型来对其执行功能?还是您只对类型感兴趣?在这种情况下,您可以将其替换为 Enum。
-
你想如何使用你的类生成的结果?