简体   繁体   English

枚举未从 webapi 调用返回

[英]Enum not returning from webapi call

I have a seperate Enum class like this:我有一个单独的 Enum 类,如下所示:

[JsonConverter(typeof(StringEnumConverter))]
public enum AStatus
{
    [EnumMember(Value = "Unverified")]
    Unverified = 0,

    [EnumMember(Value = "Verified")]
    Verified = 1,

    [EnumMember(Value = "Error")]
    Error = 2,

    [EnumMember(Value = "ServiceDown")]
    ServiceDown = 3,
}

And I am using it like this:我是这样使用它的:

[DataContract]
public partial class ResultDto
{
    [DataMember(Name="status", EmitDefaultValue=false)]
    public AStatus Status { get; set; }

    [DataMember(Name = "someOtherObjectList ", EmitDefaultValue = false)]
    public List<SomeOtherObject> SomeOtherObjectList { get; set; }

    [DataMember(Name = "messages", EmitDefaultValue = false)]
    public string Messages { get; set; }

    public string ToJson()
    {
        return JsonConvert.SerializeObject(this, Formatting.Indented);
    }
}

If I attach to the call, until ok(res), I have all properties but when I look at browser's network respose, Enum property is missing, I mean it's not in resultDto at all.如果我附加到调用,直到 ok(res),我拥有所有属性,但是当我查看浏览器的网络响应时,缺少 Enum 属性,我的意思是它根本不在 resultDto 中。

[HttpPost]
[Route("/someoperation")]
[ValidateModelState]
[SwaggerOperation("Check")]
[SwaggerResponse(200, typeof(List<ResultDto>), "successful operation")]
[SwaggerResponse(400, typeof(List<ResultDto>), "Invalid")]
public virtual IActionResult Check([FromBody] RequestDto requestDto)
{
    var res = _aService.Check(requestDto);
    return Ok(res); // until here response object has enum and it's value
}

Remove EmitDefaultValue=false if you want to use the default value of the Enum, if not so you have to set the value of the Status如果要使用 Enum 的默认值,请删除 EmitDefaultValue=false,否则必须设置 Status 的值

[DataMember(Name="status")]
public AStatus Status { get; set; }

enable Null Value Handling启用空值处理

 services.AddMvc(options =>
        {...}).AddJsonOptions(jsonOptions =>
        {
            jsonOptions.SerializerSettings.Converters.Add(new StringEnumConverter());
            jsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            jsonOptions.SerializerSettings.NullValueHandling = NullValueHandling.Include;
        })

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

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