【问题标题】:FastMember ObjectReader Returns 0 resultsFastMember ObjectReader 返回 0 个结果
【发布时间】:2017-02-22 13:16:52
【问题描述】:

我正在使用 FastMember 库将对象列表转换为数据表,但它返回空对象,所以任何人都可以帮我解决这个问题

List<object> list = new List<object>() { new { Number = 500 } };
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(list))
{
    table.Load(reader);
}

【问题讨论】:

    标签: c# datatable lis fastmember


    【解决方案1】:

    显然,Fastmember 无法枚举匿名对象的属性。因此,创建的数据读取器没有列,DataTable.Load 方法拒绝为此读取器创建空行。

    如果可以,请尝试使用具体类:

    class Thingy
    {
        public int Number { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            List<Thingy> list = new List<Thingy>() { new Thingy { Number = 500 } };
            DataTable table = new DataTable();
            using (var reader = ObjectReader.Create(list))
            {
                table.Load(reader);
            }
        }
    }
    

    编辑: 实际上,Fastmember 完全能够访问这些属性,但通用 List(对象)的类型阻止它看到它们。如果您可以提供具有实际运行时类型的 IEnumerable,它也应该可以工作:

    //This creates a "strongly" typed list, instead of List<object>:
    var list = new[] { (new { Number = 500 }) }.ToList();
    
    DataTable table = new DataTable();
    using (var reader = ObjectReader.Create(list))
    {
        table.Load(reader);
    }
    

    编辑 2: 还有另一种方法可以使用构造函数将类型信息传递给 Fastmember:

    List<object> list = new List<object> { new { Number = 500 } };
    
    DataTable table = new DataTable();
    
    // Note that type information is derived directly from the first object in the list, 
    // so try not to pass an empty one :)
    using (var reader = new ObjectReader(list[0].GetType(), list, null))
    {
        table.Load(reader);
    }
    

    另请注意,这比其他方法风险更大,因为可以创建包含混合项目类型的列表。 Fastmember 需要列表中的每个项目都具有完全相同的类型,类似以下的内容会导致异常:

    //These two items are not of the same type. Look carefully at the "Extra" property:
    List<object> list = new List<object> { new { Number = 500, Extra = true }, new { Number = 500, Extra = "Boom" } };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2015-11-01
      • 1970-01-01
      • 2012-02-01
      • 2015-12-28
      • 1970-01-01
      相关资源
      最近更新 更多