一个小前奏ASP.NET WebApi - 两种可能的JSON“返回”类型?
您好,我开发的WebAPI REST服务,目前我正在返回不同的字典端点在JSON(实体的阵列,不Dictionary
数据类型混淆)格式。字典可以按名称检索:/dictionaries/:dictName
。问题是,物品存放在字典可以有两种类型:
第一类实体
class Item {
public long ID { get; set; }
public string Name { get; set; }
}
第二类实体的 - 扩展项
class ExtendedItem : Item {
public string AdditionalProperty { get; set; } // Let's name it this way just for example
}
问题
我想避免发送不需要它的字典AdditionalProperty
。
目前的解决方案
我已经开发了一个ApiController简单的方法:
public IHttpActionResult GetDict(string name)
{
try
{
object outDict = null;
switch(name) {
case "simpleDict":
IList<Item> simpleDict = _dataLayer.GetSimpleDict();
// ...
outDict = simpleDict;
break;
case "extDict":
IList<ExtendedItem> extDict = _dataLayer.GetExtDict();
// ...
outDict = extDict;
break;
// ... and a few more dictionaries
}
SomeLogger.SomeLogging(name, outDict);
return Ok(outDict);
}
catch (Exception ex)
{
// Just returning error
return BadRequest(ex.Message);
}
}
结论和问题
虽然我设法找到这个问题的解决方案,我并不完全满意。就个人而言,我想找一个简单的方法来避免使用object
数据类型,但无法找到任何数据。现在问题来了:
- 什么是更好的编程实现这种解决方案的方式?对我来说更好表示不使用
object
类型的解决方案。有没有简单的方法来限制IList包含Item或ExtendedItem,并且没有其他类型? - 或者我应该彻底改变这个问题的方法?
- 或...也许这种方法是正确的,我有点过敏? ;-)
我将不胜感激任何帮助。
如果你把类型的'IEnumerable的- ''outDict'会发生什么?您应该能够直接分配任何派生类型。 –
krillgar
我不敢相信它就这么简单!奇迹般有效。如果可以,请添加一个答案,以便我可以接受它。并感谢;-) – PJDev