Серіалізація та десериалізація дерев виразу в C #


92

Чи є спосіб десериалізувати вирази в C #, я хотів би зберігати вирази в базі даних і завантажувати їх під час виконання.


що це за вирази? Regex?
Джон Лімджап,

16
Я б припустив вирази типу System.Linq.Expression, враховуючи "дерева".
Девід Венгір,

1
Ви можете використовувати codeproject.com/Articles/851187/…
Мохаммад Дайян

Відповіді:


48

Я продовжив роботу над бібліотекою, про яку згадували серіалізація та десеріалізація дерев виразів на C #

Схоже, від проекту відмовились (2008 р.), Але я трохи попрацював над ним, і зараз він працює з .NET 4.0 та Silverlight. Я зробив виправлення помилок у їх коді, а також зробив його більш незалежним від DAL.

http://expressiontree.codeplex.com/


2
+1 за розробку робочого рішення. Я спробував використовувати оригінальну бібліотеку на MSDN, і він не зміг десеріалізувати простий вузол двійкового виразу. Ваш проект чудово працює. Дякую!
Jacobs Data Solutions

2
Це проект на Nuget?
Мохаммад Дайян

@MohammadDayyan, Microsoft виявила нерішучість і непослідовність щодо свого інструмента управління пакетами. Іноді пакети ASP.NET CORE можна встановлювати з Nuget, в інших випадках, наприклад, драйвер MongoDB не буде доступний через NuGet. Проте принаймні Microsoft мала розуміння, щоб дозволити NPM керувати пакетами. Швидше за все це поставити на NPM
Т. Вебстер

@RepoMan вирішення проблеми для мене коштує набагато більше, коли це допомагає комусь. Можливо, ви можете надати якусь документацію щодо використання - давайте поговоримо ..
Т. Вебстер

14

Інший варіант - серіалізація дерева виразів проект на code.msdn.com - здається, тут більше, ніж потрібно?

UPD: Тепер http://archive.msdn.microsoft.com/exprserialization


Код серіалізації дерева виразів видаляється з галереї кодів code.msdn.microsoft.com/exprserialization. Будь-яка ідея, куди він переміщений, або кращі альтернативи?
Kiran Bheemarti

@Kiran: Що ти маєш на увазі? Завантаження коду все ще є; перевірте вкладку завантажень у верхній частині сторінки.
Robert Harvey

Так, це зараз, мабуть, тимчасова річ, сторінка викидала помилку проекту, не знайденого вчора, коли я спробував посилання вище. Я бачу проект і завантажую зараз. Дякую!!!
Кіран Беемарті

13

Існує проект на GitHub / Nuget під назвою MetaLinq, який має на меті полегшити роботу з експресією.

Він перетворює між звичайними виразами та "EditableExpressions", які можна змінювати та повністю серіалізувати, тому їх можна використовувати з Json, Xml, Binary тощо.

Також перегляньте цю публікацію в блозі для отримання додаткової інформації.


12

подивіться на мою нову бібліотеку Serialize.Linq . Він серіалізує вирази linq до json, xml та двійкових файлів.


ви вже цим користувались? як пройшов ваш досвід / знайшли якісь обмеження?
Alexandre Brisebois

я використав подібну його версію у своєму останньому проекті. працює добре.
esskar

Чому б вам писати щось, що гірше пропускає межі між рівнями? Ви просуваєте вплив об'єктів домену DAL на BAL ... якщо ваша бібліотека якось автоматично не перетворює DTO (і запити до них) на об'єкти / запити домену. Я не бачу нічого в документах, що вказує на таку поведінку.
M.Babcock

@ M.Babcock: те, що ви хочете використовувати у своїх виразах DTO vs Entities, не є частиною логіки бібліотеки.
esskar

4
@esskar ваш блог / цілий сайт, здається, зникли. це переїхало?
Джон

3

Не в повному обсязі; однак зразок Dynamic LINQ може трохи допомогти. Ви, звичайно, можете серіалізувати вираз до рядка (певною мірою - узагальнюючі засоби виглядають дещо заплутаними), але вбудованого аналізатора немає.


Я не можу дізнатись, як серіалізувати вираз до рядка за допомогою зразка, лише в іншому напрямку, щоб взяти за рядок і створити дерево виразів. Який метод я називаю?
Крістофер Едвардс,


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.