-
-
Notifications
You must be signed in to change notification settings - Fork 228
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Json support #791
base: master
Are you sure you want to change the base?
Add Json support #791
Conversation
Another finding is, that I don't know if the current implementation allows the validation of the expression in any way. I understand from the docs a validation should be possible with that code: ParameterExpression y = Expression.Parameter(typeof(JsonDocument), "y");
LambdaExpression e = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test"); |
But when using Select, you can also create new objects, like json.Select("new(Manage as Abc, Phone)") In this case the result is a document which contains 0 or more JsonElements with an Abc and a Phone. Correct? Or do I miss something? |
@StefH that's correct I wasn't thinking about that use case. ✅ |
Can you please elaborate on this? |
I was guessing that you can do with the snippet above a basic syntax validation like: ParameterExpression y = Expression.Parameter(typeof(JsonDocument), "y");
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test"); // No Error
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test xy y.lol"); // Error
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test != y.lol"); // No Error And so on. But currently I guess no matter what you provide as a parameter and lambda expression you will get the following error: Unhandled exception. No property or field 'test' exists in type 'JsonDocument' (at index 7)
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseMemberAccess(Type type, Expression expression, String id) in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 1889
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParsePrimary() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 814
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseUnary() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 801
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseArithmetic() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 746
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAdditive() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 713
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseShiftOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 689
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseComparisonOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 477
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLogicalAndOrOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 409
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseIn() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 328
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAndOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 311
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseOrOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 293
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLambdaOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 271
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseNullCoalescingOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 258
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseConditionalOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 242
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLambdaOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 278
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseNullCoalescingOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 258
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseConditionalOperator() in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 242
at System.Linq.Dynamic.Core.Parser.ExpressionParser.Parse(Type resultType, Boolean createParameterCtor) in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 157
at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(Type delegateType, ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] parameters, Type resultType, String expression, Object[] values) in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs:line 120
at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] parameters, Type resultType, String expression, Object[] values) in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs:line 98
at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParameterExpression[] parameters, Type resultType, String expression, Object[] values) in D:\labs\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs:line 391
at ConsoleApp_net6._0.Program.Json() in D:\labs\System.Linq.Dynamic.Core\src-console\ConsoleApp_net6.0\Program.cs:line 88
at ConsoleApp_net6._0.Program.Main(String[] args) in D:\labs\System.Linq.Dynamic.Core\src-console\ConsoleApp_net6.0\Program.cs:line 28 |
@StefH any opinions on the last comment? Maybe it's not needed for the first version of this package. But I know your community not good enough. For me, it would be just a nice to have. But definitely not needed for version one. |
If you last comment is related to: DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test xy y.lol"); // Error For that scenario, to my idea that expression ( |
@StefH no not really. every of the following lines throws the exception above: ParameterExpression y = Expression.Parameter(typeof(JsonDocument), "y");
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test");
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test xy y.lol");
_ = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { y }, null, "y => y.test != y.lol"); But I don't know if this is expected right now or if it should work. As mentioned for my code I really don't need it. |
|
Now I understand. Only when a JsonDocument is converted to an anonymous class, then this class will have the A possible solution would be to create a new SystemTextJsonDynamicExpressionParser.ParseLambda , however this will not be in scope for now. |
@StefH what is the plan to merge this branch to master? what are the open points? Can I help at any? |
@paule96 |
|
No description provided.