这是我的第一个WCF服务。我定义了一个源自Dictionary的响应消息,如下所示:
[CollectionDataContract(ItemName = "Product", KeyName = "ProductNumber", ValueName = "ProductName")]
public class GetAvailableProductsResponse : Dictionary<string, string> { }
当我尝试在服务操作中运行以下代码时,它会因无法强制转换而抛出异常:
Dictionary<string, string> result = new Dictionary<string, string>();
GetAvailableProductsResponse responseMsg = (GetAvailableProductsResponse)result;
实际上我没有实例化一个新的Dictionary但是我正在调用一个返回Dictionary的业务对象,所以我需要以某种方式将它转换为响应消息。
这可能是一般而不是WCF特定问题的问题,不是吗?
非常感谢提前!
答案 0 :(得分:2)
这是一般的强制转换问题 - 你不能在真实对象的层次结构中强制引用一个不是实际的类型。
如果您希望能够投射到GetAvailableProductsResponse
,则需要构建一个真实的实例。
答案 1 :(得分:1)
如果基类对象的实例不是派生的实例,则无法将其转换为派生类型。您可以将字典作为属性放在响应中:
public class GetAvailableProductsResponse
{
public Dictionary<string, string> Products { get; set; }
}
和
Dictionary<string, string> result = new Dictionary<string, string>();
GetAvailableProductsResponse responseMsg = new GetAvailableProductsResponse { Products = result; }
修改强>: 如果您希望保留继承,则必须为该类指定构造函数:
public class GetAvailableProductsResponse : Dictinary<string, string>
{
public GetAvailableProductsResponse(Dictionary<string, string> d) : base(d) {}
}
GetAvailableProductsResponse responseMsg = new GetAvailableProductsResponse(result);