jde*_*nis 6 c# mapping valueinjecter
我正在使用ValueInjecter进行对象映射,我正在尝试从ExpandoObject注入.我找到了一个从动态注入的例子.
public class Ac
{
public string Aa { get; set; }
}
[Test]
public void Aa()
{
var o = new { Aa = "aa" };
dynamic d = o;
var a = new Ac{ Aa = "bb" };
a.InjectFrom((object)d);
Assert.AreEqual(o.Aa, a.Aa);
}
Run Code Online (Sandbox Code Playgroud)
但是我还没有成功地使用ExpandoObject.我怎样才能做到这一点?
using System;
using System.Collections.Generic;
using System.Dynamic;
using Omu.ValueInjecter;
namespace ConsoleApplication7
{
public class FromExpando : KnownSourceValueInjection<ExpandoObject>
{
protected override void Inject(ExpandoObject source, object target)
{
var d = source as IDictionary<string, object>;
if (d == null) return;
var tprops = target.GetProps();
foreach (var o in d)
{
var tp = tprops.GetByName(o.Key);
if (tp == null) continue;
tp.SetValue(target, o.Value);
}
}
}
public class Foo
{
public string Name { get; set; }
public int Ace { get; set; }
}
class Program
{
static void Main(string[] args)
{
dynamic x = new ExpandoObject();
x.Ace = 1231;
x.Name = "hi";
var f = new Foo();
//f.InjectFrom<FromExpando>((object) x); // edit:compilation error
new FromExpando().Map((object)x,f);
Console.WriteLine(f.Ace);
Console.WriteLine(f.Name);
}
}
}
Run Code Online (Sandbox Code Playgroud)