我发现了类似的问题,但我仍然遇到麻烦:
-- 希望能更好地描述问题?----
当我调用 Web 服务时,返回的响应是一个 xml 文档。该文档定义了要返回的类,然后通过将 xml 反序列化为 8 种不同类型中的 1 种来设置所有值。
现在,当我这样做时,receipt.Item
我得到了返回的类型;但是由于使用 Web 服务调用设置接口的方式,除非我键入 cast ,否则我无法访问任何 items 成员变量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 的返回对象时,我可以通过 do 来获取类型responseObject.Item
并对其执行 a 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;
}