如何设计模型以仅接受整数和Guid?

时间:2019-03-22 05:41:22

标签: c# .net json serialization json.net

我希望我的模型在id中接受所有3种不同类型的值(基本上只有Guid和int)

这是我的模特-

public class Base
    {
        public dynamic Id { get; set; }
        public string Type { get; set; }
    }

这是我的json-

{
                "id": "31367556-cda7-4fce-9d8a-2cd6f46544f9",
                "type": "form"
},

{
                "id": "123",
                "type": "form"
},

{
                "id": 456,
                "type": "form"
}

1 个答案:

答案 0 :(得分:0)

首先,您需要回答以下问题:为什么真正需要动态类型?您将如何使用它?之后,您可以选择实施方法。也许您只需要字符串即可。

另一种方法是使用2个属性,例如enum,它为您指示应选择哪个ID。

让您的数据模型接受字符串

public class Base
    {
        public string Id { get; set; }
        public string Type { get; set; }
    }

在收到并解析它之后,您需要将此Data Transfer Model映射到Model并将其仅在Model类型的应用程序中使用。

可以是

//your ApplicationModel
public class BaseModel
{
  public Guid GuidId{get;set;}
  public int Id{get;set;}
  public IdType{get;set;}

  public enum IdType
  {
     Guid,
     Int
  }
}

public BaseModel Map(Base dto)
{
  var model=new BaseModel{Type= dto.Type};
  var guidResult = Guid.TryParse(dto.Id,out model.GuidId);
  if(!guidResult) int.TryParse(dto.Id, out model.Id);
  model.IdType = guidResult?IdType.Guid:IdType.Int;
  return model
}

对我来说,使用dynamic类型是错误的做法。我只知道少数情况可以接受。 您可以在这里找到更多信息:Is the use of dynamic considered a bad practice?