2008-10-20 29 views
84

¿Hay una manera de deserializar expresiones en C#, me gustaría para almacenar expresiones en una base de datos y cargarlos en tiempo de ejecución.serializar y deserializar expresión Árboles en C#

+0

¿qué tipo de expresiones? Regex? –

+15

Asumiría expresiones de tipo System.Linq.Expression, dado los "árboles". –

+1

puede usar http://www.codeproject.com/Articles/851187/ServicePredicateBuilder-for-creating-Serializable –

Respuesta

44

continué el trabajo en la biblioteca que fue mencionada por Serializing and Deserializing Expression Trees in C#

Parece que el proyecto fue abandonado (2008) pero trabajé en eso y ahora funciona con .NET 4.0 y Silverlight. Hice correcciones de errores en su código y también lo hice más independiente de DAL.

http://expressiontree.codeplex.com/

+2

+1 para encontrar una solución de trabajo. Intenté usar la biblioteca original en MSDN y no se pudo deserializar un simple nodo de expresión binaria. Tu proyecto funciona genial ¡Gracias! –

+2

¿Es proyecto en Nuget? –

+0

@MohammadDayyan, Microsoft ha sido indeciso e inconsistente en su herramienta de administración de paquetes. A veces, ASP.Los paquetes NET CORE se pueden instalar con Nuget, en otros casos, p. un controlador MongoDB no estará disponible a través de NuGet. Sin embargo, al menos Microsoft tenía la idea de permitirle a NPM administrar paquetes. Es más probable que ponga esto en NPM –

2

No está lleno; sin embargo, la muestra Dynamic LINQ puede ayudar un poco. Ciertamente, puede serializar una expresión en una cadena (hasta cierto punto, los genéricos parecen un poco confusos), pero no hay un analizador incorporado.

+0

No puedo averiguar cómo serializar una expresión en una cadena utilizando la muestra, solo la otra dirección, para tomar como cadena y crear un árbol de expresión. ¿A qué método llamo? –

13

Hay un proyecto en GitHub/Nuget llamada MetaLinq que tiene como objetivo facilitar el trabajo con árboles expresión más fácil.

Convierte entre las expresiones normales y 'EditableExpressions' que son mutable y totalmente Serializable, por lo que se puede utilizar con JSON, XML, etc. Binary

También compruebe esta blog post para obtener más información.

14

Otra opción es el proyecto Expression Tree Serialization en code.msdn.com - parece ser más de lo que se necesita aquí?

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

+0

El árbol de expresiones El código de serialización se elimina de la galería de códigos http://code.msdn.microsoft.com/exprserialization, ¿hay alguna idea de dónde se mueve o de mejores alternativas? –

+0

@Kiran: ¿Qué quieres decir? La descarga del código todavía está allí; mira la pestaña de descargas en la parte superior de la página. –

+0

Sí, es ahora, probablemente algo temporal, la página estaba arrojando un error de proyecto no encontrado ayer cuando probé el enlace de arriba. Veo el proyecto y lo descargo ahora. ¡¡¡Gracias!!! –

2

WCF RIA Services permite para serializar IQuerayble<T>

WCF RIA Services Part 3 – Updating Data

+0

Creo que esto es más relevante: http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx –

7

echar un vistazo a mi nueva biblioteca Serialize.Linq. Serializa expresiones linq a json, xml y binary.

+0

¿ha usado esto antes? ¿cómo fue tu experiencia/encontrar alguna limitación? –

+0

utilicé una versión similar en mi último proyecto. funciona bien – esskar

+0

¿Por qué escribirías algo que sangra las líneas entre niveles peor? Está promoviendo la exposición de objetos de dominio DAL al BAL ... a menos que su biblioteca de alguna manera convierta de manera automática los DTO (y las consultas en su contra) en objetos de dominio/consultas. No veo nada en los documentos que indique tal comportamiento. –

Cuestiones relacionadas