Serializing dan Deserializing Expression Trees di C #

92

Apakah ada cara untuk Deserialize Expressions di C #, saya ingin menyimpan Expressions dalam Database dan memuatnya saat dijalankan.

Alexandre Brisebois
sumber
ekspresi seperti apa? Regex?
Jon Limjap
16
Saya akan mengasumsikan ekspresi tipe System.Linq.Expression, mengingat "pohon".
David Wengier
1
Anda dapat menggunakan codeproject.com/Articles/851187/…
Mohammad Dayyan

Jawaban:

48

Saya melanjutkan pekerjaan di perpustakaan yang disebutkan oleh Serializing dan Deserializing Expression Trees di C #

Sepertinya proyek ini ditinggalkan (2008) tetapi saya melakukan beberapa pekerjaan dan sekarang bekerja dengan .NET 4.0 dan Silverlight. Saya membuat perbaikan bug pada kode mereka dan juga membuatnya lebih tidak bergantung pada DAL.

http://expressiontree.codeplex.com/

T. Webster
sumber
2
1 untuk menghasilkan solusi yang berfungsi. Saya mencoba menggunakan pustaka asli di MSDN dan itu tidak bisa menghilangkan simpul ekspresi biner sederhana. Proyek Anda bekerja dengan baik. Terima kasih!
Jacobs Data Solutions
2
Apakah itu proyek di Nuget?
Mohammad Dayyan
@MohammadDayyan, Microsoft telah ragu-ragu dan tidak konsisten dalam alat manajemen paketnya. Terkadang paket ASP.NET CORE dapat diinstal dengan Nuget, dalam kasus lain misalnya driver MongoDB tidak akan tersedia melalui NuGet. Setidaknya masih Microsoft memiliki wawasan untuk memungkinkan NPM mengelola paket. Lebih mungkin untuk menempatkan ini pada NPM
T. Webster
@RepoMan memecahkan masalah jauh lebih berharga bagi saya ketika itu membantu seseorang. Mungkin Anda dapat menyumbangkan beberapa dokumentasi tentang penggunaan - mari kita bicara ..
T. Webster
14

Pilihan lain adalah proyek Serialisasi Pohon Ekspresi di code.msdn.com - akan tampak lebih apa yang dibutuhkan di sini?

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

Kaya
sumber
Expression Tree Serialization code dihapus dari code gallery code.msdn.microsoft.com/exprserialization , tahu kemana ia akan dipindahkan atau alternatif yang lebih baik?
Kiran Bheemarti
@Kiran: Apa maksudnya? Download kode masih ada; periksa tab unduhan di bagian atas halaman.
Robert Harvey
Ya sekarang, mungkin hal yang sementara, halaman melempar proyek tidak ditemukan kesalahan kemarin ketika saya mencoba tautan di atas. Saya melihat proyek dan mengunduh sekarang. Terima kasih!!!
Kiran Bheemarti
13

Ada sebuah proyek di GitHub / Nuget bernama MetaLinq yang bertujuan untuk membuat pekerjaan dengan rambut ekspresi lebih mudah.

Ini mengubah antara Ekspresi normal dan 'EditableExpressions' yang dapat berubah dan dapat diserialkan sepenuhnya, sehingga dapat digunakan dengan Json, Xml, Binary, dll.

Periksa juga posting blog ini untuk info lebih lanjut.

Pop Catalin
sumber
12

lihatlah perpustakaan baru saya Serialize.Linq . Ini membuat serial ekspresi linq menjadi json, xml dan biner.

esskar
sumber
apakah kamu pernah menggunakan ini sebelumnya? bagaimana pengalaman Anda / menemukan batasan?
Alexandre Brisebois
saya menggunakan versi serupa di proyek terakhir saya. bekerja dengan baik.
esskar
Mengapa Anda menulis sesuatu yang memperparah garis antara tingkatan? Anda mempromosikan eksposur objek domain DAL ke BAL ... kecuali perpustakaan Anda entah bagaimana secara otomatis mengubah DTO (dan kueri terhadapnya) menjadi objek / kueri domain. Saya tidak melihat apa pun di dokumen yang menunjukkan perilaku seperti itu.
M.Babcock
@ M.Babcock: apa yang ingin Anda gunakan dalam ekspresi DTO vs Entitas bukan bagian dari logika pustaka.
esskar
4
@esskar blog / seluruh situs Anda sepertinya hilang. sudah pindah?
Jon
3

Tidak seluruhnya; namun, contoh Dynamic LINQ mungkin sedikit membantu. Anda pasti dapat membuat serial ekspresi menjadi string (sampai batas tertentu - generik terlihat agak aneh), tetapi tidak ada parser bawaan.

Marc Gravell
sumber
Saya tidak dapat menemukan cara untuk membuat serial ekspresi ke string menggunakan sampel, hanya arah lain, untuk mengambil sebagai string dan membuat pohon ekspresi. Metode apa yang saya panggil?
Christopher Edwards