繁体   English   中英

如何在 Asp.Net 中制作可选的 Model Class 属性 Web Z72664DC0959F3B46C04891F8C037

[英]How to make optional Model Class Properties in Asp.Net Web Api

我有一个 model class 看起来像,

     public string EmpID { get; set; }
     public string Mobile { get; set; }
     public string Email { get; set; }
     public string OfficeAddress { get; set; }
     public string City { get; set; }
     public string State { get; set; }

但是在我的 Api 响应中,我想根据条件发送,如果条件 1 满足则发送以下响应,

{
     "EmpID":"1",
     "Email":"abc@gmail.com"
}

如果条件 2 满足,则发送以下响应,

{
     "EmpID":"1",
     "Mobile":"1234567890"
     "Email":"abc@gmail.com"
}
else
{
     //send full model class property
}

//注意:我在model class中使用了JsonIgnore属性。 但在我的情况下它不起作用。 有没有办法忽略 controller 或业务逻辑层中的属性?

从您的示例中,您似乎想根据条件包含一个属性。 如果我没记错的话,如果值为 null,JSON 将不会在响应中包含该属性。 但是,像 Swagger 这样的文档生成器可能仍包含该属性,以防止客户端获取不完整的数据对象。 不过,我不是 100% 的。

也就是说,根据您定义响应的方式,您的代码应该按原样正常运行。

您可以尝试定义一个单独的响应 model,其中您将Mobile属性定义为可为空,以及任何其他可能为 null 的属性。 然后在您的 controller 中,您在 map 业务 model 到您的响应 Z20F35E630DAF44DBFA4C3F68F 通过手动初始化或返回该 Z20F35E630DAF44DBFA4C3F68F。 您的代码如下所示:

public async Task<ActionResult<ResponseModel>> GetResponseModel()
{
    var businessModel = await businessManager.GetBusinessModel();

    if (<condition1>) {
        return new ResponseModel
        {
            EmpId = businessModel.EmpId,
            Email = businessModel.Email
        };
    } else if (<condition2>) {
        return new ResponseModel
        {
            EmpId = businessModel.EmpId,
            Mobile = businessModel.Mobile,
            Email = businessModel.Email
        };
    } else {
        // return full BusinessModel as ResponseModel
    }
}

如果使用 AutoMapper,您可以将new ResponseModel {...}替换为AutoMapperField.Map<ResponseModel>(businessModel)

[JsonIgnore]指示 (De-)Serializer 在序列化或反序列化到 JSON 时忽略属性,但据我所知,.NET 在 ZDB974238714CA8DE634A7CE1D08 响应中忽略了这些属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM