Asp.net mvc 4 如何在使用EF4创建JSON响应时隐藏导航属性?

Asp.net mvc 4 如何在使用EF4创建JSON响应时隐藏导航属性?,asp.net-mvc-4,entity-framework-4,Asp.net Mvc 4,Entity Framework 4,我正在开发一个Web服务应用程序,当我从我的EF模型(例如,我的“用户”对象的列表)中获得数据时,我会得到表的字段和外键,等等 有人知道如何避免这些吗?我一直在尝试修改poco模板,但运气不好 namespace JOhn.DataAccess { [Serializable()] [DataContract(Namespace = "")] public class CustomEntityObject : EntityObject {

我正在开发一个Web服务应用程序,当我从我的EF模型(例如,我的“用户”对象的列表)中获得数据时,我会得到表的字段和外键,等等

有人知道如何避免这些吗?我一直在尝试修改poco模板,但运气不好

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

    }
}

常见的解决方案是使用DTO(“数据传输对象”)模式

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


像这样的包可以用来避免编写值复制代码。

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

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


可以使用类似的包来避免编写值复制代码。

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

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

另一种不创建DTO的方法是使用。然后您的对象可能看起来像:

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

}另一种不创建DTO的方法是使用。然后您的对象可能看起来像:

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

[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; }
  }
}有一个

[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; }
  }

}

Hi Ross,谢谢你的回答,我的所有对象都基于自定义实体对象……因此我想我可以编辑自定义编辑对象……但我不知道如何编辑……唯一简单的解决方案是从每个对象的每个不需要的属性中删除[datamember]……是否有办法一次对所有对象执行此操作?我已经声明…这是自定义实体:我在上面添加了它。嗨,罗斯,谢谢你的回答,我的所有对象都基于自定义实体对象…所以我想我可以编辑自定义编辑对象…但我不知道如何…唯一简单的解决方案是删除[datamember]从每个对象的每个不需要的属性…是否有任何方法可以同时对所有对象执行此操作?我已经声明…这是自定义实体:我在上面添加了它。