2010-03-03 35 views
0

我们有一个指向WCF服务的服务引用,它充当我们的模型层的代理,我们的数据访问逻辑正在处理中。在引擎盖下,我们使用Linq2Sql作为ORM来促进数据库通信。控制通过服务引用序列化的属性

我们使用生成的类作为我们的数据访问层,但返回的实际上是愚蠢的DTOs对象,它们不过是POCO。我想做两件事)

1)根据自定义类型及其相关属性,通过服务引用来控制客户端上可用的内容。这是为了减少课程的规模。

2)我知道Linq2Sql实际上是装饰所有生成的类,但我不希望这些类通过服务引用传出。

目前,如果我们使用该类作为输入参数的返回类型,它将被序列化。这很好,除了我想限制哪些属性可用

想法?

回答

0

所以我发现了这一点。基本上,当您创建服务引用时,只有以某种方式使用的类型会被序列化。默认情况下,如果没有DataContract,则所有内容都将被序列化。

如果DataContract存在,它将查找DataMember装饰属性并仅序列化这些属性。 Tricky

+0

不棘手 - 记录! :-)这就是为什么我主张**总是**在你的DTO上明确使用[DataContract]和[DataMember]。这样做的前提是要做更多的工作,但是你明确而清楚地知道序列化的内容(以及被跳过的内容)。这种额外的工作将在维修模式中得到回报 - 很多次! – 2010-03-04 07:53:13

+0

我同意,我只是没有意识到,实际上来回答,因为我要去的文档:)有趣的是如何工作。就像哈尔说的那样,我们生成的类被抽象出来,从不用作返回值。 – xximjasonxx 2010-03-04 14:07:28

0

你想DTO的通过你的服务界限,从你的Linq抽象为SQL对象,是否正确?

如果是这样,那么我会建议定义你的DTO(如果你有很多对象,写或找到一些好的T4模板),然后使用AutoMapper在你的DTO和Linq之间来回切换到SQL对象。

+0

我们已经定义了所有的DTO。我已经从Linq2Sql中抽象了所有生成的类的用法(除了静态上下文),因为它们太重了,导致我们的JSON序列化器出现问题 – xximjasonxx 2010-03-04 14:08:17