我是ASP.NET Web API的新手。
我看到了如何在RESTful Web应用程序中获取和返回POCO的示例。
我想知道在现实世界的应用程序中,你只能传递POCO的一些属性(出于安全性和/或消息大小的原因)。
我发现我可以使用'[ScriptIgnore]'属性,但我正在寻找一种方法来根据请求控制器自定义要传递的属性,例如。
这样做是否有一个很好的,开箱即用的方式?
由于
答案 0 :(得分:2)
可能最简单的方法是用System.Runtime.Serialization.DataContractAttribute
和System.Runtime.Serialization.DataMemberAttribute
包含的成员装饰您的POCO,即
[DataContract]
public class MyType
{
[DataMember]
public string Property1 {get; set;}
public string Property2 {get; set;}
public string Property3 {get; set;}
}
在这种情况下,只会序列化Property1
。值得注意的是,XmlMediaTypeFormatter
和JsonMediaTypeFormatter
都会尊重DataContract
,因此您不需要任何特定于XML / JSON的attrbiutes。
现在,这将适用于更简单的解决方案,为您提供真正的,全面的方法,您可能需要使用DTO而不是将模型暴露给客户端。
您可以使用Automapper
,并将模型投影到DTO - 您在这里有一篇很好的介绍性文章http://www.mono-software.com/blog/post/Mono/120/Using-AutoMapper-to-handle-DTOs/。此外,使用Automapper,您可以使用相同的基本模型创建不同类型的DTO,据我所知,这是您感兴趣的内容。
答案 1 :(得分:0)
如果您试图从不同的控制器返回同一模型的多个表现形式,那么这是一种有害的设计(据我所知)。如果您仍想这样做,可以将不需要的属性设置为“null”并返回模型。
要处理要从序列化中忽略的null对象,您必须在配置格式化程序时在某处执行此操作(在global.asax中):
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;