Wcf 控制通过服务引用序列化哪些属性

Wcf 控制通过服务引用序列化哪些属性,wcf,web-services,datacontractserializer,Wcf,Web Services,Datacontractserializer,我们有一个指向WCF服务的服务引用,它充当处理数据访问逻辑的模型层的代理。在后台,我们使用Linq2Sql作为ORM,以方便数据库通信 我们使用生成的类作为数据访问层,但返回的实际上是哑DTOs对象,它们只不过是POCO。我想做两件事) 1) 根据自定义类型及其关联属性,通过服务引用控制客户端上可用的内容。这是为了减少班级人数 2) 我知道Linq2Sql实际上是在用修饰所有生成的类,但我不希望这些类通过服务引用来实现 目前,如果我们使用该类作为输入参数的返回类型,它将被序列化。这很好,但我想限

我们有一个指向WCF服务的服务引用,它充当处理数据访问逻辑的模型层的代理。在后台,我们使用Linq2Sql作为ORM,以方便数据库通信

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

1) 根据自定义类型及其关联属性,通过服务引用控制客户端上可用的内容。这是为了减少班级人数

2) 我知道Linq2Sql实际上是在用修饰所有生成的类,但我不希望这些类通过服务引用来实现

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


想法?

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


如果存在DataContract,它将查找DataMember修饰的属性并仅序列化这些属性。棘手的

您希望DTO通过从Linq到SQL对象抽象出来的服务边界,对吗


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

不难-有文档记录!:-)这就是为什么我主张在DTO上始终显式使用[DataContract]和[DataMember]。这样做需要做更多的前期工作,但之后您就可以明确地了解哪些内容被序列化(以及哪些内容被跳过)。这些额外的工作将在以后的维护模式下得到回报-多次!我同意,我只是没有意识到这一点,实际上是在我去看文档的时候回答的:)这很有趣。正如哈尔所说,我们生成的类被抽象掉了,从来没有用作返回值。我们已经定义了所有的DTO。我一直致力于从Linq2Sql中抽象生成的类的任何用法(静态上下文除外),因为它们太重,会导致JSON序列化程序出现问题