Gibt es eine elegante schnelle Möglichkeit, Objekte einem Wörterbuch zuzuordnen und umgekehrt?
Beispiel:
IDictionary<string,object> a = new Dictionary<string,object>();
a["Id"]=1;
a["Name"]="Ahmad";
// .....
wird
SomeClass b = new SomeClass();
b.Id=1;
b.Name="Ahmad";
// ..........
c#
.net
dictionary
reflection
mapping
Sawan
quelle
quelle
Antworten:
Mit etwas Reflexion und Generika in zwei Erweiterungsmethoden können Sie dies erreichen.
Richtig, andere haben meistens die gleiche Lösung gewählt, aber dies erfordert weniger Reflexion, was leistungsmäßig und viel lesbarer ist:
quelle
GetType()
nichtsomeObject
mehr für jede Eigenschaft mehr aufgerufen wird.Konvertieren Sie das Wörterbuch zuerst mit Newtonsoft in eine JSON-Zeichenfolge.
Deserialisieren Sie dann die JSON-Zeichenfolge für Ihr Objekt
quelle
Scheint, als würde Reflexion hier nur helfen. Ich habe ein kleines Beispiel für die Konvertierung eines Objekts in ein Wörterbuch gemacht und umgekehrt:
quelle
Ich kann den Castle DictionaryAdapter nur empfehlen , eines der bestgehüteten Geheimnisse dieses Projekts. Sie müssen nur eine Schnittstelle mit den gewünschten Eigenschaften definieren, und in einer Codezeile generiert der Adapter eine Implementierung, instanziiert sie und synchronisiert ihre Werte mit einem Wörterbuch, das Sie übergeben. Ich verwende es, um meine AppSettings stark einzugeben ein Webprojekt:
Beachten Sie, dass ich keine Klasse erstellen musste, die IAppSettings implementiert - der Adapter erledigt dies im laufenden Betrieb. Auch wenn ich in diesem Fall nur lese, würde der Adapter theoretisch das zugrunde liegende Wörterbuch mit diesen Änderungen synchron halten, wenn ich Eigenschaftswerte für appSettings festlegen würde.
quelle
Durch Reflexion können Sie von einem Objekt zu einem Wörterbuch gelangen, indem Sie die Eigenschaften durchlaufen.
Um in die andere Richtung zu gehen, müssen Sie in C # ein dynamisches ExpandoObject verwenden (das tatsächlich bereits von IDictionary erbt und dies für Sie getan hat), es sei denn, Sie können den Typ aus der Sammlung von Einträgen in der Liste ableiten Wörterbuch irgendwie.
Wenn Sie sich in .NET 4.0 befinden, verwenden Sie ein ExpandoObject, da Sie sonst noch viel zu tun haben ...
quelle
Ich denke, Sie sollten Reflexion verwenden. Etwas wie das:
Es nimmt Ihr Wörterbuch und durchläuft es und legt die Werte fest. Sie sollten es besser machen, aber es ist ein Anfang. Sie sollten es so nennen:
quelle
quelle
Aufbauend auf der Antwort von Matías Fidemraizer finden Sie hier eine Version, die das Binden an andere Objekteigenschaften als Zeichenfolgen unterstützt.
quelle
Wenn Sie Asp.Net MVC verwenden, sehen Sie sich Folgendes an:
Dies ist eine statische öffentliche Methode für die System.Web.Mvc.HtmlHelper-Klasse.
quelle
quelle