【发布时间】:2009-12-15 13:50:58
【问题描述】:
我有一个 Windows WCF 服务和 Web 客户端。我的服务只有一种方法
[OperationContract]
SubmitOrder(OrderInfo info)....
// class used to pass all relevant data
[DataContract]
class OrderInfo
{
[DataMember]
OrderType Type;
// general order data
}
在我引入新的订单类型(由OrderInfo.Type 属性控制)之前,这很棒。您可以将新订单类型视为源自一般订单(就行为而言)。
每个新订单都有一些附加属性。什么是最好的方法
实现 Order 的这种多态行为?
目前我只是在添加新订单的同时向 OrderInfo 类添加新属性。
[DataContract]
class OrderInfo
{
[DataMember]
OrderType Type;
// general order data
// First custom order data
// Second custom order data
// TODO - add new properties for new orders
}
我不太喜欢它,因为它太直了。如果我更改 [DataContract] 和客户端怎么办 是不是重建?
我有哪些选择?我当然可以实现继承并派生新的[DataContract]类,如MyCustomOrder1,但是序列化不支持继承,我需要使用[KnownTypes],由于某些原因,这是被禁止的。
【问题讨论】:
-
嗯,它并不完全重复。我的问题是 - 如何在不使用 [KnownTypes] 的情况下使用新属性扩展基类。
-
这是
KnownType,而不是KnownTypes。 -
一种可能的解决方案是添加字符串属性并在客户端序列化您想要的任何内容并在服务端反序列化。
标签: c# design-patterns inheritance serialization polymorphism