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 ….