使用DataContract序列化传递的类的实例

时间:2013-12-13 11:06:19

标签: c# datacontract known-types

我的库里面有类似下一个:

[DataContract]
class MyBaseClass
{
    public string Name { get; set; }
}

另外,我有另一个带有这个库的参考项目,其中的类看起来像:

[DataContract]
class MyDeliveredClass : MyBaseClass
{
    public string SecondName { get; set; }
}

我想知道如何序列化可能包含list<MyBaseClass>MyBaseClass对象的MyDeliveredClass

可能我应该使用[KnownType(MyDeliveredClass)] ...但我在库中没有提到MyDeliveredClass ...

1 个答案:

答案 0 :(得分:1)

如果您在服务合约界面上将MyBaseClass和MyDeliveredClass声明为服务已知类型,那么应该这样做:

[ServiceContract(SessionMode = SessionMode.Required, ...)]
[ServiceKnownType(typeof(MyBaseClass ))]
[ServiceKnownType(typeof(MyDeliveredClass ))]
public interface IMySerivceContract {
    ...
}

通常,您必须在类声明上将其声明为KnownTypes或在服务接口上作为ServerKnownTypes进行选择。但是,有时KnownType路由不是出于各种原因的选项 - 其中一个原因是您无法访问类声明。您被迫使用ServiceKnownTypes的另一种情况是,如果您的合同使用接口而不是基类,即合同中有List<IMyBaseInterface>