我想在WCF中使用继承的类型,但我不想在基类中添加所有类型的KnownType属性,因为基类在另一个程序集中,也是为了避免依赖。 那么,实现这一目标的另一种方法是什么?
答案 0 :(得分:1)
我认为至少有两种方法可以做到这一点。
您可以创建自己的类(DTO)并将其他程序集中的数据映射到您的类。对于映射,您可以使用AutoMapper。它具有以下优点:
您可以或多或少地将ServiceKnownType
添加到您的ServiceContract界面(我没有测试代码):
[DataContract]
public class BaseClass {}
[DataContract]
public class DerivedClass : BaseClass {}
[ServiceKnownType(typeof(BaseClass))]
[ServiceKnownType(typeof(DerivedClass))]
[ServiceContract()]
public interface IYourContract
{
[OperationContract]
BaseClass[] GetClasses();
}
有关详细信息,请查看文档here。有很好的例子。
哪个更好?
这取决于你需要什么。如果您正在开发原型或需要快速执行某些操作,请选择选项2.如果您需要更可靠的解决方案,那么选择选项1将会更长时间。
答案 1 :(得分:1)
有更多方法可以指定已知类型。其中之一是将它们放在配置文件中。这样,您的服务在编译时就无法了解它们。但是为了序列化它们,它必须在运行时了解它们。