我可以告诉 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 类都包含 ICollection
s,因为它们是 EF4.1 Code First 的一部分,
因此我得到错误:
无法序列化类型 ... System.Collections.Generic.ICollection ...因为它是类型 - 因为它是一个接口
为了避免 XMLIgnore
和 ScriptIgnore
是 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 序列化程序忽略嵌套类对象吗?的主要内容,如果未能解决你的问题,请参考以下文章