c# - ASP.NET WebAPI 创建一级 JSON

标签 c# json asp.net-mvc entity-framework asp.net-web-api

Domain assembly中有很多相关实体。例如,People 具有指向 FamilyRelationsHousesPersons 的导航属性 (Level1)。除此之外,Houses 有自己的 nav.prop (Level2) 到 AddressAddress (Level3) 必须到 City , 街道 ...等 enter image description here 当我将 LazyLoadingEnabled 设置为 true 时,我将获得包含所有相关实体的 JSON(在屏幕左侧)。

我怎样才能只获得一层嵌套(如在 scree 的右侧)或将其他级别设置为 NULL 值(因为我设置了 Newtonsoft.Json.NullValueHandling.Ignore)?
我可以在不对每个实体使用 .Include 的情况下实现它吗?

我的类(class):

    public class People : BaseEntity
    {
        public int PersonID { get; set; }

        public int HouseID { get; set; }

        public int PeopleNumber { get; set; }

        public int? FamilyRelationID { get; set; }            

        //FK to House
        public virtual House Houses { get; set; }
        //FK to Person
        public virtual Person Persons { get; set; }
        //FK to FamilyRelations
        public virtual FamilyRelations FamilyRelations { get; set; }
    }

WebAPI 配置:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new   MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
            = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling
             = Newtonsoft.Json.NullValueHandling.Ignore;

我没有任何解决方案,因为我没有足够的经验。
所以,我需要你的建议和建议。对不起我的英语,如果我需要添加更多信息,请告诉我。谢谢

更新
我试图添加 [JsonIgnore] 或忽略映射类中的那些属性,但是当我请求 get/House 时,我需要从 Address< 获取字段 没有 nav.prop,当请求 get/People 时,我不需要 Address。因此我无法忽略它。

最佳答案

切勿将跟踪对象返回给 Controller 。您的业​​务逻辑代码(不应存在于 Controller 中)应将您的数据库感知对象映射到 POCO。这可以像使用

一样简单
var poco = AutoMapper.Map<People>(livePerson)

并且您在映射配置文件中设置为忽略这些属性,这样它们就不会被复制。

请注意,我的 automapper-fu 生锈了,语法是粗略的代码。

您需要非常小心地进行任何盲映射,因为它会让您打开 Mass Assignment vulnerability。 .这同样适用于直接进入您的实时跟踪对象。如果用户在他们的数据中看到 IsAdmin: false,他们可能会变得狡猾并发布 IsAdmin: true。这可以通过盲目分配保存到您的数据库中。

关于c# - ASP.NET WebAPI 创建一级 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620089/

相关文章:

c# - 简单数据结构的最轻序列化方法

java - 获取 JSON 中的重复响应

c# - 用于上传视频的YouTube数据API在MVC中不起作用

c# - 如何在 Windows 上的 .net 框架中使用来自 ECC X509 证书的公钥加密数据?

c# - 脚本之间未保存 Unity 实例

c# - Excel.exe 应用程序在使用完后未关闭

c# - C# 中用于强类型 View 的字符串格式化

c# - 我的按钮没有回发?我将它与 Javascript 绑定(bind)在一起,而 Javascript 又与 div 绑定(bind)在一起

java - 使用 Jackson 无法识别 @JsonCreator

asp.net-mvc - 如何使用枚举值填充下拉列表?