gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:58 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com