c# – 使用ValueInjecter从ExpandoObject中注入
发布时间:2020-12-15 08:19:08 所属栏目:百科 来源:网络整理
导读:我正在使用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
我正在使用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); } 但是我还没有成功地使用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); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |