我的库里面有类似下一个:
[DataContract]
class MyBaseClass
{
public string Name { get; set; }
}
另外,我有另一个带有这个库的参考项目,其中的类看起来像:
[DataContract]
class MyDeliveredClass : MyBaseClass
{
public string SecondName { get; set; }
}
我想知道如何序列化可能包含list<MyBaseClass>
和MyBaseClass
对象的MyDeliveredClass
?
可能我应该使用[KnownType(MyDeliveredClass)]
...但我在库中没有提到MyDeliveredClass
...
答案 0 :(得分:1)
如果您在服务合约界面上将MyBaseClass和MyDeliveredClass声明为服务已知类型,那么应该这样做:
[ServiceContract(SessionMode = SessionMode.Required, ...)]
[ServiceKnownType(typeof(MyBaseClass ))]
[ServiceKnownType(typeof(MyDeliveredClass ))]
public interface IMySerivceContract {
...
}
通常,您必须在类声明上将其声明为KnownTypes或在服务接口上作为ServerKnownTypes进行选择。但是,有时KnownType路由不是出于各种原因的选项 - 其中一个原因是您无法访问类声明。您被迫使用ServiceKnownTypes的另一种情况是,如果您的合同使用接口而不是基类,即合同中有List<IMyBaseInterface>
。