0

我是 ASP.NET Web API 的新手。

我看到了如何在 RESTful Web 应用程序中获取和返回 POCO 的示例。

我想知道在现实世界的应用程序中,您如何只能传递 POCO 的一些属性(出于安全和/或消息大小的原因)。

我发现我可以使用“[ScriptIgnore]”属性,但我正在寻找一种方法来自定义根据请求控制器传递哪些属性,例如。

是否有一种很好的、​​开箱即用的方式来做到这一点?

谢谢

4

2 回答 2

2

可能最简单的方法是装饰你的 POCOSystem.Runtime.Serialization.DataContractAttribute和你想要包含的成员,System.Runtime.Serialization.DataMemberAttribute

[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 特定的属性。

现在,这将在更简单的解决方案中起作用,对于一个真正的、全面的方法,您可能需要求助于 DTO 而不是将模型暴露给客户端。

您可以使用Automapper它,并将模型投影到 DTO - 您在这里有一篇很好的介绍性文章http://www.mono-software.com/blog/post/Mono/120/Using-AutoMapper-to-handle-DTOs/。此外,使用 Automapper,您可以从同一个基本模型创建不同类型的 DTO,据我所知,这是您感兴趣的东西。

于 2012-09-27T12:05:02.257 回答
0

如果您试图从不同的控制器返回同一模型的多个表现形式,那么这是一种有害的设计(根据我的说法)。如果您仍然想这样做,您可以将不需要的属性设置为“null”并返回模型。

要处理从序列化中忽略的空对象,您必须在配置格式化程序时在某处执行此操作(在 global.asax 中):

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
于 2012-09-27T12:01:41.257 回答