Roslyn versus Expression / Func

Am avut nevoie sa serializez  o clasa ce continea o variabila de tipul Func . De ce sa serializez? Ca utilizatorul ( gen DevOps ) sa poata sa modifice parametrii si/sau sa creeze functii diferite ( ginditi-va la o clauza de genul  where id =7 ). Pe de alta parte , acest Func trebuie aplicat ( dupa deserializare) unei liste de obiecte …. dinamic adica.

Cum sa fac?

Am citit de nu am mai putut – evident un Func de genul

(addDate) =>
                {
                    var secs = double.Parse(addDate);
                    return new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(secs);
                }

 

e destul de greu de serializat / deserializat.

Asa ca am ajuns la Expression<Func> . Func-ul dinainte poate fi scris ca un Expression asa:

 (addDate) => 
                new DateTime(1970, 1, 1, 0, 0, 0, 0)
                .AddSeconds(double.Parse(addDate))

)

 

Si poate fi serializat cu Newtonsoft.json si Aq.ExpressionJsonSerializer(https://github.com/UizzUW/EJS.Core , https://github.com/aquilae/expression-json-serializer )

Problema este modul de serializare – absolut ingrozitor de citit…

Asa ca am citit mai mult si am ajuns la Roslyn – https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples .

Cu Roslyn trebuie doar sa trec parametru globals si conditia de where – si am terminat.

Asa ca , in loc sa serializez un Expression, serializez doar un string – si gata!

Revin : cititi https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples si o sa va vina la idei ….

Leave a Reply

Your email address will not be published. Required fields are marked *