更具体地说,问题是: 如何使用属性签名中具有(必须具有)接口类型的WCF来序列化类,因为它实现了接口?
这是一个设计问题。我不是在寻找黑客。 目的是使接口定义与实现类分开,因此不要让接口引用实现类。
我知道我们不应该传递与WCF和。的接口 还有(不可互操作的)方法(比如使用NetDataContractSerializer或ServiceKnownType属性),但这给我留下了一个问题:是否有一种正确的方法来使用基于WCF接口的类,或者这不应该是尝试了什么?
答案 0 :(得分:4)
序列化基本上是关于传输数据。接口是关于描述行为。从根本上说,这两件事情是完全正交的,IMO。
你可以可能使它与[KnownType(...)]
一起使用 - 如果你在每一端使用相同的确切类型(汇编共享),它肯定会有所帮助,但这非常非便携式的。
如果您正在使用 portability 的惯用WCF,那么您应该将自己局限于简单的数据协定,这对于只知道WSDL的客户来说是有用的。
那就是说,当我觉得适合我的时候,我毫不犹豫地折磨和滥用WCF; p
答案 1 :(得分:3)
我找到了解决我自己特定问题的方法。
问题在于我将属性(接口类型)标记为DataMember。通过将相应的私有成员标记为DataMember(并确保它们的类型是具体类),问题得以解决。
示例:
[DataContract()]
public class Company : ICompany
{
[DataMember(Name = "Employees")]
private EmployeeList _employees;
public IEmployeeList Employees { get { return _employees; }}
}