我正在使用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); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。