【问题标题】:how use enum that is returning string in C#如何使用在 C# 中返回字符串的枚举
【发布时间】:2022-09-24 03:16:35
【问题描述】:

我尝试创建一个 Rest API C# 端点,以便他们可以将 JSON 发布到该端点并对其进行处理。这是他们将发布到我的端点的示例 JSON,如下所示:

 {
   \"Guid\": \"abc123\",
   \"ID\": \"68AA101C-111-888-9CC1-1265\",
   \"Name\": \"test\",  
   \"formData\": [
   {
   \"FieldGuid\": \"454545454545\",
   \"FieldType\": \"a\",
   \"Label\": \"First name\",
   \"Value\": \"Sam\"
    },
   {
  \"FieldGuid\": \"121212121254545\",
  \"FieldType\": \"a\",
  \"Label\": \"Last name\",
  \"Value\": \"DummyData\"
   },
   {
  \"FieldGuid\": \"787878787854545\",
  \"FieldType\": \"b\",
  \"Label\": \"Date of Birth\",
 \"Value\": \"1999-01-01T16:05:00.000Z\"
 },
 {
\"FieldGuid\": \"2323212121545\",
\"FieldType\": \"c\",
\"Label\": \"Gender\",
\"Value\": \"Male\"
},

......
 ] }

如您所见,\"formData\" 有很多属性(就像 40 个)。将“formData”添加到我的模型的最佳方法是什么?

到目前为止,这是我的模型:

  public class Data
   {
   }

   public class FormData 
   {
    public string FieldGuid { get; set; }
    public string FieldType { get; set; }
    public string Label { get; set; }
    public object Value { get; set; }
   }

  public class Root
   {
   public string Guid { get; set; }
   public string ID { get; set; }
   public string Name { get; set; }
   public Data Data { get; set; }
   public List<FormData > formData { get; set; }
  }

这是我的 API 端点:

[HttpPost(\"CreateOT\")]
public OPIEPatientDto CreateOT([FromBody] OTDto dto)
{
    SaveDto saveDto = new SaveDto();
    foreach (var item in dto.FormData)
    {
        switch (item.Label)
        {
            case \"First name\":
                saveDto.genericData.FirstName = item.Value.ToString();
                break;

            case \"Last name\":
                savePatientCommandDto.genericData.LastName = item.Value.ToString();
                break;

            case \"Date of Birth\":
                savePatientCommandDto.genericData.DateOfBirth = Convert.ToDateTime(item.Value);
                break;
        }

    }
...
}

即使这个模型和使用 foreach 循环也可以吗?并且如果不是大小写\“名字\”:我想使用枚举,我该怎么办?

我创建了一个枚举,如:

public enum FormDataEnum
{
    Firstname = 0,
    Lastname = 1,
    DateofBirth = 2,
    Gender = 3,

......

但是当我想这样使用时:

  switch (item.Label)
              {
                case FormDataEnum.Firstname.ToString():

不认识名字。我知道我们在 C# 中没有枚举作为字符串,我可以使用 struct 或 const,我该如何使用枚举?

  • 您是否尝试过使用枚举作为标签的类型? public FormDataEnum Label { get; set; }
  • 是的,这是正确的方法,如下面的答案中所述。点赞

标签: c# webapi


【解决方案1】:

首先在类中创建 FormDataEnum 类型的 Label 属性。

然后您可以轻松执行:

switch(varLabel)//the enum variable
{
   case FormDataEnum.FirstName:
   {
   //code
   break;
   }
  case FormDataEnum.Lastname:
  {
  //code
  break;
  }
 default:
 {
 //something
 }
}

更新

 public class FormData
    {
        public enum FormDataEnum
        {
            Firstname = 0,
            Lastname = 1,
            DateofBirth = 2,
            Gender = 3
        }

        public FormDataEnum Label {get;set;}    

        public FormData(){}    
    }    

class Program
    {
        static void Main(string[] args)
        {
            List<FormData> list = new List<FormData>();

            FormData f1 = new FormData();
            f1.Label = FormData.FormDataEnum.Firstname;
            list.Add(f1);

            FormData f2 = new FormData();
            f2.Label = FormData.FormDataEnum.DateofBirth;
            list.Add(f2);

            FormData f3 = new FormData();
            f3.Label = FormData.FormDataEnum.Gender;
            list.Add(f3);    

            foreach (var formData in list)
            {    
                switch (formData.Label)
                {
                    case FormData.FormDataEnum.Firstname:
                        {
                            Console.WriteLine("FirstName");
                            break;
                        }
                    case FormData.FormDataEnum.DateofBirth:
                        {
                            Console.WriteLine("DateofBirth");
                            break;
                        }
                    default:
                        {
                            Console.WriteLine("default");
                            break;
                        }

                }

            }
            Console.ReadLine();

        }
    }

【讨论】:

  • 我在所有字段“错误”中都收到此错误:{“formData [0] .Label”:[“错误转换值\“名字\”以键入'Ossur.ProApp.Api.V2_0.Models.PatientDtos。 FormDataEnum'。路径 'formData[0].Label',第 1 行,位置 502。 ],
  • 你能把整个代码?
  • 这是我的标签: public FormDataEnum Label { get;放; } - 这是端点: foreach (var item in dto.FormData) { switch (item.Label) { case FormDataEnum.Firstname: saveDto.genericData.FirstName = item.Value.ToString();休息; case FormDataEnum.Lastname: saveDto.genericData.LastName = item.Value.ToString();休息;
  • 让我做一个概念证明,我会更新代码,不需要转换 ToString()
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多