Cast dynamische Objekt-Typ unter Verwendung von reflektion ab c#
Betrachten Sie den folgenden code
var currentType = Type.GetType("Some.Type, Some");
dynamic myDynamic = new System.Dynamic.ExpandoObject();
myDynamic.A = "A";
var objectInCorrectType = ???
Wie kann ich warf die Dynamik currentType?
- Das können Sie nicht. Entweder Ihr macht eine Neuinterpretation Besetzung, die im Grunde sagt: "ich weiß, diese Quelle ist wirklich eine X sich als Y, so Stimmen Sie zu X für mich, interpretieren die Referenz als Referenz zu X", oder Sie haben eine Bekehrung, die beinhaltet code, läuft die Umsetzung, wie das erstellen einer neuen X und kopieren über Werte, etc. Es gibt keine integrierte Möglichkeit zu konvertieren oder umwandeln von einem ExpandoObject auf einige spezifische Art, die Sie brauchen, um zu bauen, dass sich selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht wirken ein dynamisches Objekt zu einem bestimmten Typ, wie @Lasse kommentiert.
Jedoch in Ihrer Frage erwähnt, "Reflexion", also ich vermute, du suchst eine Möglichkeit, einfach map-Werte (d.h. "erstellen einer neuen X und kopieren über Werte, etc." in lasses Kommentar):
dynamic
ist duck-typing eine variable (d.h. die Verzögerung der Typ-überprüfung-Zeit). Es hält noch ein typisiertes Objekt, aber es ist nicht aktiviert während der compile-Zeit.So, seit ein
ExpandoObject
ist ein Typ, entweder, wenn Sie zuweisen eine typisierte oder eine dynamische Verweisung, können Sie nicht wirken, oder konvertieren Sie eineExpandoObject
auf eine Art, nur weil es Aktien die gleichen Mitglieder als Ziel geben.BTW, da
ExpandoObject
implementiertIDictionary<string, object>
können Sie implementieren eine Art von on-the-fly-mapping aus derExpandoObject
Instanz für Ziel Art, wo ein Mitglied Spiele als eine Erweiterung-Methode:Nun versuchen Sie den folgenden code, und es wird so funktionieren wie Sie es erwarten:
Tatsächlich, ich habe basiert diese Antwort auf der anderen Q&A, wo ich könnte ein ähnliches Problem der Zuordnung von Objekten zu Wörterbuch, und Umgekehrt: Zuordnung-Objekt, um die Wörterbuch-und Umgekehrt.
Kam ich über diese Frage, weil ich brauchte, um eine Klasse wie folgt aus:
konvertieren und die
PropertyArray
Eigenschaft eines Objekts (Deserialisierung von JSON mit der Newtonsoft-Bibliothek) in ein array von Objekten eines bestimmten Typs, wo der Typ kann abgeleitet werden, aus derPropertyName
.Schrieb ich diese helper-Klasse namens
DynamicCast<>
und beschlossen, es hier zu posten falls jemand anders in der gleichen situation wie ich.Diese helper-Klasse ermöglicht es Ihnen, code zu schreiben, wie diese:
Dies ist ein Beispiel, wie ich es zur Lösung meiner Deserialisierung problem:
Den schrieb der
DynamicCast
Klasse basierend auf andere Antworten hier. Es sieht wie folgt aus:Können Sie versuchen, diese für sich selbst in .Net Fiddle hier: https://dotnetfiddle.net/J1JXgU