ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-枚举属性,Web API,JSON反序列化和错别字

2019-11-09 02:06:33  阅读:12  来源: 互联网

标签:enums asp-net c



假设我们有一个像这样的课程:

public class Person
{
     [JsonConstructor]
     public Person(string name, DayOfWeek bornOnDay) => (Name, BornOnDay) = (name, bornOnDay);

     public string Name { get; protected set; }

     public DayOfWeek BornOnDay { get; protected set; }
}

还有一个这样的端点:

[HttpPost]
[Route("api/people")]
public IHttpActionResult PostPerson([FromBody]List<Person> people)
{
     // whatever
}

我注意到,如果我在发出请求时在枚举类型中输入错字-不会发生错误,只有具有错误枚举的对象才会被反序列化.

例如,请求主体可能如下所示:

[{"name":"John", "bornOnDay":"Moonday",},
 {"name":"Mark", "bornOnDay":"Friday",},]

端点将收到包含一个在星期五出生的人Mark的列表.

我想使发布操作要么完全发生,要么失败,不仅仅针对没有枚举错别字的对象.有没有办法做到这一点,不接收字符串而不是DayOfWeek,然后使用Enum.TryParse(. ..)确定输入错误?

编辑:

我实际上希望错误发生并且可以检测到,因此我可以将400个代码返回给客户端.

解决方法:

您可以这样做,您可以从输入的字符串创建枚举值

public class Person
{
     private string day;
     [JsonConstructor]
     public Person(string name, string bornOnDay){
         this.Name = name;
         this.day = bornOnDay;
     }

     public string Name { get; protected set; }

     public DayOfWeek BornOnDay { 
     get {
          DayOfWeek  weekday;
          if(Enum.TryParse(day, true, out weekday))
            return weekday;  
          else
            return DayOfWeek.None;//add none if no able to parse
     }
 }

注意:根据Null Object Pattern,不会添加任何内容,以避免与系统中的空值相关的问题.



标签:enums,asp-net,c

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有