簡體   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