我有一个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]
。
可能的重复:http://stackoverflow.com/questions/1826218/how-do-i-use-knowntype-to-enable-polymorphic-return-values-in-a-wcf-service-contr/1826321# 1826321 – 2009-12-15 13:56:45
好吧,它不是重复的。我的问题是 - 如何在不使用[KnownTypes]的情况下用新属性扩展基类。 – 2009-12-15 14:12:12
它是'KnownType',而不是'KnownTypes'。 – 2009-12-15 16:19:30