是否可以使用动态对象评估表达式?

时间:2017-11-09 09:28:33

标签: c# dynamic

我使用以下代码根据强类型对象计算表达式:

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");

0 个答案:

没有答案