隐藏Web API响应中的属性

时间:2019-04-23 06:36:17

标签: c# asp.net-core-webapi

我想从Web api响应中隐藏ModifiedbyModifieddateCreateddate属性。

我尝试使用[JsonOgnore][IgnoreDataMember],但没有用。

[ModelMetadataType(typeof(UserModel))]
partial class TUsers
{
}

public class UserModel
{
    public int Userid { get; set; }
    [Required]
    public string Firstname { get; set; }
    public string Middlename { get; set; }
    public string Lastname { get; set; }
    public int? Modifiedby { get; set; }
    public DateTime? Modifieddate { get; set; }
    public DateTime? Createddate { get; set; }
}


    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        try
        {
            var user = _service.GetUser(id);
            return Ok(new { status = Constants.Success, message = "", User = user });
        }
        catch (Exception ex)
        {
            return BadRequest(new { status = Constants.Failed, message = ex.Message });
        }
    }

实际结果

{
    "status": "success",
    "message": "",
    "user": {
        "userid": 0,
        "firstname": null,
        "middlename": null,
        "lastname": null,
        "modifiedby": null,
        "modifieddate": null,
        "createddate": null
    }
}

预期结果

{
    "status": "success",
    "message": "",
    "user": {
        "userid": 0,
        "firstname": null,
        "middlename": null,
        "lastname": null
    }
}

3 个答案:

答案 0 :(得分:0)

您已经提到过使用[JsonOgnore]在要排除的属性上应该是[JsonIgnore],这应该可以工作。

但是,除了传递User对象外,您还可以创建具有所需属性的UserModel对象,然后将UserModel对象传递给Response,但是您需要在此处映射属性UserUserModel,但比排除序列化的属性更具可读性。

答案 1 :(得分:0)

简单来说,您可以使用以下属性。

pm2 start main.js --name FOO -i 2

答案 2 :(得分:-1)

使用[DataMember]属性尝试

[DataContract]
public class UserModel
{
    [DataMember]
    public int Userid { get; set; }
    [Required]
    [DataMember]
    public string Firstname { get; set; }
    [DataMember]
    public string Middlename { get; set; }
    [DataMember]
    public string Lastname { get; set; }
    public int? Modifiedby { get; set; }
    public DateTime? Modifieddate { get; set; }
    public DateTime? Createddate { get; set; }
}