我使用以下代码根据强类型对象计算表达式:
using Newtonsoft.Json;
using NUnit.Framework;
using System.Linq.Dynamic;
using E = System.Linq.Expressions;
public class Person { public string Name { get; set; } }
[Test]
public void Evaluate_expression_using_strongly_typed_object()
{
Person obj = JsonConvert.DeserializeObject<person>("{ 'Name': 'John Smith'}");
string name = obj.Name;
var t = obj.GetType();
var p = E.Expression.Parameter(obj.GetType(), "obj");
var e = DynamicExpression.ParseLambda(new[] { p }, null, "obj.Name = \"John Smith\"");
Assert.That((bool)e.Compile().DynamicInvoke(obj) == true);
}
是否可以使用动态对象执行相同的操作? 即:
[Test]
public void Evaluate_expression_using_dynamic_object()
{
dynamic obj = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
string name = obj.Name;
string address = obj.Address.City;
var t = obj.GetType();
var p = E.Expression.Parameter(obj.GetType(), "obj");
var e = DynamicExpression.ParseLambda(new[] { p }, null, "obj.Name = \"John Smith\"");
Assert.That((bool)e.Compile().DynamicInvoke(obj) == true);
}
第二个代码块无法编译。 new [] {p} - 无法转换为&#39; dynamic []&#39;到&#39; System.Type&#39;
- 编辑 -
如果我投出动态[]&#39;到&#39; System.Type&#39;然后我收到以下错误。 System.Linq.Dynamic.ParseException:&#39;没有属性或字段&#39;名称&#39;存在于&#39; JObject&#39;&#39;
中var p = E.Expression.Parameter((Type)obj.GetType(), "obj");