我希望我的模型在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"
}
首先需要在以下问题上回答:为什么您真的需要动态类型?您要如何使用它?之后,您可以选择实施方法。也许您只需要字符串。
另一种方法是用于2个属性,例如为您指示应该选择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
类型是不良习惯。我只知道可以接受的情况。您可以在这里找到更多信息:动态的使用是否被认为是不良练习?