我正在尝试生成表达式树。我有JSON数据,我已进入JOject
这就是我firstRecord
的样子: -
{
"Name": "JOHN",
"Code": "112631.1"
}
代码: -
var reportArr = (JArray)(data["reportData"]);
var firstRecord=reportArr.FirstOrDefault();//sample data given above
Type classType = firstRecord.GetType();// Type is Of JObejct.
ParameterExpression parameter = Expression.Parameter(classType, "lambdaKey");
var fun = Expression.GetFuncType(classType, typeof(object));
var menuProperty = Expression.Property(parameter, "Name");//Throwing error
错误消息是: -
Instance property 'Name' is not defined for type 'Newtonsoft.Json.Linq.JObject'
如何使用JOject从Expression.Property获取MemberExpression。
答案 0 :(得分:1)
JObject
是动态类型,不提供常规类型等类型属性。
与表达式一样,您可以从编写编译时表达式开始:
Expression<Func<JObject, object>> expr = item => ((JValue)item.Property("Name").Value).Value;
使用调试器Locals / Watch窗口检查内部的内容。
在这种情况下,它会是这样的
var item = Expression.Parameter(typeof(JObject), "item");
var body = Expression.Property(
Expression.Convert(
Expression.Property(
Expression.Call(item, "Property", null, Expression.Constant("Name"))
, "Value")
, typeof(JValue))
, "Value");
var expr = Expression.Lambda<Func<JObject, object>>(body, item);