我可以告诉 WCF WebAPI 序列化程序忽略嵌套类对象吗?

Posted

技术标签:

【中文标题】我可以告诉 WCF WebAPI 序列化程序忽略嵌套类对象吗?【英文标题】:Can I tell the WCF WebAPI serializer to ignore nested class objects? 【发布时间】:2011-10-21 01:23:44 【问题描述】:

我正在使用WCF WebAPI 使用 WCF 编写 REST 服务。 我将我的 POCO 类作为 json/xml 对象从我的服务中返回。 我的大多数 POCO 类都包含 ICollections,因为它们是 EF4.1 Code First 的一部分, 因此我得到错误:

无法序列化类型 ... System.Collections.Generic.ICollection ...因为它是类型 - 因为它是一个接口

为了避免 XMLIgnoreScriptIgnore 是 suggested。而且custom serialization of JSON in WCF有一些问题。

只是觉得有人可能遇到过类似的问题,并且有更好的解决方案或配置序列化类的方法,否则我将不得不用XMLIgnore 等装饰每个此类属性。

【问题讨论】:

【参考方案1】:

通常您可能会使用 DTO 或(在 ASP.NET MVC 中查看模型)与您的域模型分离。并且您可以使用 AutoMapper 最大限度地减少域模型和 DTO 之间的代码转换。

【讨论】:

对此回复+1。 WCF WebAPI 并不是真正从事通过网络提供丰富实体的业务,它更专注于 RESTful 交互和数据表示。我所有的 WCF WebAPI 都公开了专门设计的 DTO,它们仅代表请求所需的数据。 谢谢,我明白这一点,但我写这些 REST svc 的原因是为了与内部数据库同步云数据库,因此我按原样发送 EF POCO 实体。【参考方案2】:

您必须添加 [XmlIgnore] 和 [IgnoreDataMember]。那么对于 xml 和 json 响应,该属性将被忽略。

【讨论】:

【参考方案3】:

没错 Sandro,[IgnoreDataMember][XmlIgnore] 是必需的。

稍微解释一下: 需要[IgnoreDataMember] 排除json序列化中的字段, xml序列化中排除字段需要[XmlIgnore]

【讨论】:

【参考方案4】:

我发现在 WCF WebAPI 中 [ScriptIgnore][JsonIgnore] 不起作用并且没有效果,所以我将返回 ASP.NET MVC 以获取与 json 相关的 REST API。

更新[2012 年 7 月 24 日] 这个答案是旧的,并且 Microsfot WebAPI 已经走过了很长的路,请在依赖这个答案之前检查。

【讨论】:

以上是关于我可以告诉 WCF WebAPI 序列化程序忽略嵌套类对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以创建一个多个调用不相互阻塞的 WCF

POST 到 WCF 服务

WCF 休息与 WebAPI

是否可以将Json.Net设置为忽略$ type?

.NET Core Web APi类库如何内嵌运行?

序列化反序列化