public interface IConverter
{
T Convert(string value);
}
public class Converter : IConverter
{
public T Convert(string value)
{
try
{
var converter = TypeDescriptor.GetConverter(typeof(T));
if (converter != null)
{
return (T)converter.ConvertFromString(value);
}
return default(T);
}
catch (Exception)
{
return default(T);
}
}
}
public class GenericDTO
{
public T Id { get; set; }
public T Name { get; set; }
public T Price { get; set; }
}
[HttpPost]
public IActionResult Create(GenericDTO dto)
{
var converter = new Converter();
var product = new Product
{
Id = converter.Convert(dto.Id),
Name = dto.Name,
Price = converter.Convert(dto.Price),
};
_dbContext.Add(product);
_dbContext.SaveChanges();
return NoContent();
}
这样,我们就可以在ASP.NET Core Web API中使用包含所有类型属性的通用DTO了。