Serialisieren und Deserialisieren von Expressionsbäumen in C #

89

Gibt es eine Möglichkeit, Ausdrücke in C # zu deserialisieren? Ich möchte Ausdrücke in einer Datenbank speichern und zur Laufzeit laden.

Alexandre Brisebois
quelle
Welche Art von Ausdrücken? Regex?
Jon Limjap
16
Ich würde Ausdrücke vom Typ System.Linq.Expression annehmen, wenn man die "Bäume" bedenkt.
David Wengier
1
Sie können codeproject.com/Articles/851187/…
Mohammad Dayyan

Antworten:

48

Ich setzte die Arbeit an der Bibliothek fort, die durch Serialisieren und Deserialisieren von Expressionsbäumen in C # erwähnt wurde.

Es sieht so aus, als ob das Projekt abgebrochen wurde (2008), aber ich habe einige Arbeiten daran durchgeführt und jetzt funktioniert es mit .NET 4.0 und Silverlight. Ich habe Fehlerbehebungen an ihrem Code vorgenommen und ihn auch DAL-unabhängiger gemacht.

http://expressiontree.codeplex.com/

T. Webster
quelle
2
+1 für die Entwicklung einer funktionierenden Lösung. Ich habe versucht, die ursprüngliche Bibliothek auf MSDN zu verwenden, und ein einfacher binärer Ausdrucksknoten konnte nicht deserialisiert werden. Ihr Projekt funktioniert hervorragend. Vielen Dank!
Jacobs Data Solutions
2
Ist es ein Projekt auf Nuget?
Mohammad Dayyan
@MohammadDayyan, Microsoft war bei seinem Paketverwaltungstool unentschlossen und inkonsistent. Manchmal können ASP.NET CORE-Pakete mit Nuget installiert werden, in anderen Fällen ist beispielsweise ein MongoDB-Treiber nicht über NuGet verfügbar. Zumindest Microsoft hatte die Einsicht, NPM die Verwaltung von Paketen zu ermöglichen. Wahrscheinlicher, dies auf NPM zu setzen
T. Webster
@RepoMan das Lösen eines Problems ist mir viel mehr wert, wenn es jemandem hilft. Vielleicht können Sie eine Dokumentation zur Verwendung beitragen - lassen Sie uns sprechen ..
T. Webster
14

Eine andere Option ist das Expression Tree Serialization- Projekt auf code.msdn.com - scheint mehr zu sein, was hier benötigt wird?

UPD: Jetzt http://archive.msdn.microsoft.com/exprserialization

Reich
quelle
Der Ausdrucksbaum-Serialisierungscode wird aus der Codegalerie code.msdn.microsoft.com/exprserialization entfernt. Gibt es eine Idee, wohin er verschoben wird, oder bessere Alternativen?
Kiran Bheemarti
@ Kiran: Was meinst du? Der Code-Download ist noch da; Überprüfen Sie die Registerkarte Downloads oben auf der Seite.
Robert Harvey
Ja, es ist jetzt, wahrscheinlich eine vorübergehende Sache, die Seite hat gestern einen Projektfehler ausgelöst, als ich den obigen Link ausprobiert habe. Ich sehe das Projekt und lade es jetzt herunter. Vielen Dank!!!
Kiran Bheemarti
13

Auf GitHub / Nuget gibt es ein Projekt namens MetaLinq , das die Arbeit mit Ausdrucksstress einfacher machen soll.

Es konvertiert zwischen normalen Ausdrücken und 'EditableExpressions', die veränderlich und vollständig serialisierbar sind und daher mit Json, Xml, Binary usw. verwendet werden können.

Überprüfen Sie auch diesen Blog-Beitrag für weitere Informationen.

Pop Catalin
quelle
11

Schauen Sie sich meine neue Bibliothek Serialize.Linq an . Es serialisiert Linq-Ausdrücke in JSON, XML und Binär.

esskar
quelle
hast du das schon mal benutzt? Wie war Ihre Erfahrung / finden Sie irgendwelche Einschränkungen?
Alexandre Brisebois
Ich habe in meinem letzten Projekt eine ähnliche Version davon verwendet. funktioniert gut.
Esskar
Warum würden Sie etwas schreiben, das die Grenzen zwischen den Ebenen noch schlimmer macht? Sie fördern die Exposition von DAL-Domänenobjekten gegenüber der BAL ... es sei denn, Ihre Bibliothek konvertiert DTOs (und die Abfragen gegen sie) automatisch in Domänenobjekte / -abfragen. Ich sehe in den Dokumenten nichts, was auf ein solches Verhalten hinweist.
M.Babcock
@ M.Babcock: Was Sie in Ihren Ausdrücken DTO vs Entities verwenden möchten, ist nicht Teil der Logik der Bibliothek.
Esskar
4
@esskar dein Blog / deine ganze Seite scheint weg zu sein. hat es sich bewegt?
Jon
2

Nicht vollständig; Das Dynamic LINQ- Beispiel kann jedoch etwas hilfreich sein. Sie können einen Ausdruck sicherlich in einen String serialisieren (bis zu einem gewissen Grad - Generika sehen etwas verrückt aus), aber es gibt keinen eingebauten Parser.

Marc Gravell
quelle
Ich kann nicht herausfinden, wie ein Ausdruck mithilfe des Beispiels in eine Zeichenfolge serialisiert wird, nur in die andere Richtung, um ihn als Zeichenfolge zu verwenden und einen Ausdrucksbaum zu erstellen. Welche Methode rufe ich auf?
Christopher Edwards