如何在使用EF 4创建JSON响应时隐藏导航属性?

时间:2013-07-29 09:00:40

标签: asp.net-mvc-4 entity-framework-4

我正在开发一个Web服务应用程序,当我从我的EF模型中获取时 - 例如我的“用户”对象的列表 - 我得到了我的表的字段PLUS外键等?

有谁知道如何避免这些?我一直试图修改poco模板,但没有运气。

     namespace JOhn.DataAccess
{
    [Serializable()]
    [DataContract(Namespace = "")]
    public class CustomEntityObject : EntityObject
    {
        //[DataMember]
        [Browsable(false)]
        [XmlIgnore]
        [SoapIgnore]
        public new EntityKey EntityKey { get; set; }

    }
}

4 个答案:

答案 0 :(得分:2)

一个常见的解决方案是使用DTO("数据传输对象")模式。

定义一个名为UserDto的新类,其中只包含您要通过API公开的字段,然后将值从User实体对象复制到UserDto实例。

AutoMapper之类的软件包可用于避免编写值复制代码。

答案 1 :(得分:1)

有一个

[ScriptIgnore]

属性,它适用于Microsoft的默认JavaScript序列化程序。

namespace AutoFX.DataAccess
{
  [Serializable()]
  [DataContract(Namespace = "")]
  public class CustomEntityObject : EntityObject
  {
    //[DataMember]
    [Browsable(false)]
    [XmlIgnore]
    [SoapIgnore]
    [ScriptIgnore]
    public new EntityKey EntityKey { get; set; }
  }

}

答案 2 :(得分:0)

尝试创建模型类并使用此模型绑定用户对象的数据。这将有助于克服依赖性。

答案 3 :(得分:0)

在不创建DTO的情况下执行此操作的另一种方法是使用JSON.Net in your MVC Application。然后你的对象看起来像:

namespace John.DataAccess
{
  [Serializable()]
  [DataContract(Namespace = "")]
  public class CustomEntityObject : EntityObject
  {
    //[DataMember]
    [Browsable(false)]
    [XmlIgnore]
    [SoapIgnore]
    [JsonIgnore]
    public new EntityKey EntityKey { get; set; }
  }

}