一個小前奏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