这对已知类型工作正常:但我的要求是我需要传递通用类型..请帮助
var jsonData = JsonConvert.DeserializeObject<IEnumerable<ModelName>>(smalljson);
但是当我将模型设为通用时,我在 LoadFromENumerable 和 CreateEnumerable 收到此错误:
类型“T”必须是引用类型才能将其用作泛型类型或方法“DataOperationsCatalog.LoadFromEnumerable”中的参数“TRow”
代码:
public async Task<SplitDatasets> SplitDataset<T>(Guid scheduleId, Guid assessmentId, string inputJson, int trainPercentage, string model)
{
dynamicProtoList json = JsonConvert.DeserializeObject<dynamicProtoList>(inputJson);
string smalljson = JsonConvert.SerializeObject(json.samples);
var context = new MLContext();
var jsonData = JsonConvert.DeserializeObject<IEnumerable<T>>(smalljson);
IDataView dataView = context.Data.LoadFromEnumerable(jsonData);
double perc = trainPercentage / 100.0;
DataOperationsCatalog.TrainTestData dataSplit = context.Data.TrainTestSplit(dataView, testFraction: perc);
SplitDatasets splitDatasets;
return splitDatasets = new SplitDatasets()
{
TestDataset = JsonConvert.SerializeObject(context.Data.CreateEnumerable<T>(dataSplit.TestSet, reuseRowObject: true)),
TrainDataset = JsonConvert.SerializeObject(context.Data.CreateEnumerable<T>(dataSplit.TrainSet, reuseRowObject: true))
};
}
从下面我调用这个方法
splitDatasets = await SplitDataset<MSG>(projectConfig.ScheduleId, projectConfig.AssessmentId, json,projectConfig.Evaluation_Split,projectConfig.Model);