我需要一些指导,以了解为以下场景定义DataContracts的最佳方法: 1.我有两个网络方法,一个上传原始数据 2.此数据在服务器上用于某些计算。即一个项目有一组计算, 因此,我的实体设计使得Item实体具有Calculation实体的集合。该集合未标记为DataMember。 4. GetItemDetails方法返回每个项目的计算集合。 5.我最终为Upload和GetItemDetails操作定义了2个不同的DataContracts,因为Item是我的主要实体,用于我的所有业务逻辑操作,但其计算集合是在服务器端生成的数据,必须按需返回( GetItemDetails)。由于处理数据似乎不适合在上传时公开它,因为计算集合中不需要输入。 6.在我的GetItemDetails方法中,我使用'Item'实体并使用resp加载项目集合。计算集合,然后将其转换为我的输出datacontract,其中包含项目和集合。
这种方法的缺点是必须为同一个实体表示维护2个数据协定。 我试图搜索在GetItemDetails方法的Calculation集合上动态添加DataMember属性的选项,但没有成功。 我希望情景很清楚。我的问题是在这种情况下定义数据合同的最佳方法是什么,以便客户端不必处理2个不同的代理类来表示上传和获取相同的内容。如果同时使用相同的实体,那么它是一个正确的解决方案,以便我的上传合同公开(然后忽略计算集合中的任何输入),即使用户不希望将其提供给我的上传操作吗?
我将不胜感激。
答案 0 :(得分:0)
您应该查看KnownType WCF属性。这将允许您指定可以接受的其他对象。
另一个选择是使用继承并且具有一个具有最小属性的基类和一个从基类继承的更健壮的类。虽然这不会绕过重复的实体对象,但至少可以使用向上/向下转换。
另一种选择是拥有单独的对象。客户会明确知道需要设置什么。没有猜测工作。只暴露你需要的东西。我最倾向于这个选项或继承选项。