C# 具有复杂对象的ML.NET LoadFromEnumerable

C# 具有复杂对象的ML.NET LoadFromEnumerable,c#,ml.net,C#,Ml.net,我想从复杂对象创建IDataView 假设我的对象是这些简单的类: class-Foo { 公共条{get;set;} } 分类栏 { 公共int num{get;set;} } (当然,在我的代码中,Foo中有更多的字段,其中一些是对象或集合) 现在,我正在尝试加载Foos的集合,其中包含: var mlContext=new mlContext(); var foos=新列表 { 新富 { 条=新条{num=5} }, 新富 { 条=新条{num=5} } }.AsEnumerable(

我想从复杂对象创建
IDataView

假设我的对象是这些简单的类:

class-Foo
{
公共条{get;set;}
}
分类栏
{
公共int num{get;set;}
}
(当然,在我的代码中,
Foo
中有更多的字段,其中一些是对象或集合)

现在,我正在尝试加载
Foo
s的集合,其中包含:

var mlContext=new mlContext();
var foos=新列表
{
新富
{
条=新条{num=5}
}, 
新富
{
条=新条{num=5}
}
}.AsEnumerable();
var dataview=mlContext.Data.LoadFromEnumerable(foos);
我得到了一个错误:

System.ArgumentOutOfRangeException:无法确定成员栏的IDataView类型 参数名称:rawType

即使我将
对象注册为,也没有比这更好的了:

DataViewTypeManager.Register(NumberDataViewType.Int32,typeof(Bar));

您希望ML.NET如何“神奇地”将Bar类型的对象转换为int而不提供任何附加信息?如果我是你,我会把你的对象图展平到“记录”上format@jakobandersen我现在正在展平我的对象结构:-)。我希望
ml.net
也能这样做。使用名为
bar\u num
或类似内容的列。当列名按我们传递的字段顺序排列时,这肯定是一个唯一的名称。唯一的问题是对象引用中的递归。@baruchiro您可能希望将标题中的方法名称“LoadFromEnumerate”更改为“LoadFromEnumeratable”,这可能会使线程更容易找到。我遇到了同样的问题&还没有找到解决方案。您希望ML.NET如何“神奇地”将Bar类型的对象转换为int而不提供任何其他信息?如果我是你,我会把你的对象图展平到“记录”上format@jakobandersen我现在正在展平我的对象结构:-)。我希望
ml.net
也能这样做。使用名为
bar\u num
或类似内容的列。当列名按我们传递的字段顺序排列时,这肯定是一个唯一的名称。唯一的问题是对象引用中的递归。@baruchiro您可能希望将标题中的方法名称“LoadFromEnumerate”更改为“LoadFromEnumeratable”,这可能会使线程更容易找到。我遇到了同样的问题&还没有找到解决办法。