Ein kleines IntroASP.NET WebApi - zwei mögliche JSON "Return" -Typen?
Hallo, ich bin eine WebAPI Erholung Service-Entwicklung und ich arbeite derzeit an einem Endpunkt, die verschiedenen Wörterbücher zurückzugibt (Arrays von Entitäten, nicht zu verwechseln mit Dictionary
Datentyp) in JSON Format. Wörterbücher können mit dem Namen abgerufen werden: /dictionaries/:dictName
. Das Problem ist, dass Elemente in Wörterbücher gehalten kann von zwei Arten sein:
ersten Art von Entitäten
class Item {
public long ID { get; set; }
public string Name { get; set; }
}
Zweite Art von Entitäten - erweiterte Artikel
class ExtendedItem : Item {
public string AdditionalProperty { get; set; } // Let's name it this way just for example
}
Das Problem
Ich möchte vermeiden, senden AdditionalProperty
für Wörterbücher, die es nicht benötigen.
Aktuelle Lösung
ich eine einfache Methode in ApiController entwickelt haben:
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);
}
}
Fazit und Fragen
Obwohl ich finden verwaltet eine Lösung für das Problem, ich bin nicht ganz zufrieden damit. Persönlich würde ich gerne einen einfachen Weg finden, um object
Datentyp zu verwenden, konnte jedoch keine. Und jetzt kommen die Fragen:
- Was wäre ein besserer programmatischer Weg zur Implementierung einer solchen Lösung? Für mich besser bedeutet Lösung ohne Verwendung der
object
Art. Gibt es eine einfache Möglichkeit, IList zu beschränken, um Item oder ExtendedItem und keine anderen Typen zu enthalten? - Oder vielleicht sollte ich den Ansatz für das Problem vollständig ändern?
- Oder ... Vielleicht ist dieser Ansatz richtig und ich bin ein wenig überempfindlich? ;-)
Ich werde für jede Hilfe dankbar sein.
Was passiert, wenn Sie- '' machen outDict' vom Typ 'IEnumerable geschieht? Sie sollten in der Lage sein, jeden abgeleiteten Typ direkt zuzuweisen. –
krillgar
Ich kann nicht glauben, dass es so einfach war! Klappt wunderbar. Wenn Sie können, fügen Sie eine Antwort hinzu, damit ich sie akzeptieren kann. Und danke ;-) – PJDev