我在我的项目中使用WCF服务.此服务返回一个名为"Store"的类.我创建了一个继承自"Store"的新本地类.我的班级叫做"ExtendedStore".我的ExtendedStore看起来像这样:
class ExtendedStore : StoreManagerService.Store
{
public int Id;
....
}
Run Code Online (Sandbox Code Playgroud)
现在我使用WCF服务使用以下代码强制转换为我的类:
StoreManagerService.StoreClient client = new StoreManagerService.StoreClient();
ExtendedStore store = (ExtendedStore) client.GetStore(); // bombs here
Run Code Online (Sandbox Code Playgroud)
我无法将返回的Store类从服务转换为我的ExtendedStore类.我收到以下错误消息:
无法将"ConsoleApplication1.StoreManagerService.Store"类型的对象强制转换为"ConsoleApplication1.ExtendedStore".
我不应该投这个吗?如果没有,是否有解决方法?
Joh*_*ers 12
您不应该从WCF返回的代理类型继承.考虑到该类型不属于您!
您可以使用C#的分部类功能执行一些"扩展",因为代理类是作为部分类生成的.不要ExtendedStore使用Id属性创建类,请尝试:
public partial class Store
{
public int Id {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
这会向Store类添加Id属性.您还可以通过这种方式添加方法事件等.
部分类需要在包含服务引用的同一项目中定义.
考虑具有根命名空间"Project"的项目.您有一个名为"Commerce"的服务引用到一个返回"Store"对象的Web服务.这意味着有一个名为的类Project.Commerce.Store:
// Proxy code generated by "Add Service Reference":
namespace Project.Commerce {
[DataContract]
public partial class Store {
[DataMember]
public string StoreName {get;set;}
// More data members here
}
}
Run Code Online (Sandbox Code Playgroud)
您将在项目根目录下创建一个名为"Commerce"的文件夹.这样您在那里创建的类的名称空间将是"Project.Commerce".然后创建你的部分类:
// This is your code in Store.cs in the new "Commerce" folder:
namespace Project.Commerce {
public partial class Store {
public int Id {get;set;}
public override string ToString() {
return String.Format("Store #{0}: {1}", Id, StoreName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
检查Data Contract KnownTypes,它使您能够使用继承.主要是让你能够将派生类的对象分配给父类的对象等等...检查KnownType和ServiceKnownType它会对你有所帮助.
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |