我有一个simlpe类,其属性类型为IEnumerable在尝试创建带反射的序列化程序时(请参阅Microsoft .NET SDK For Hadoop),它失败并出现以下异常。
无法找到任何匹配的已知类型 'System.Collections.Generic.IEnumerable`1 [System.String]'。
但是当使用string []而不是IEnumerable
时它会起作用使用过的课程
[DataContract]
public class MyClass
{
[DataMember]
public string Field1;
[DataMember]
//public string[] Array1; This works
public IEnumerable<string> Array1; //this doesn't
}
代码
public void CreateSerializer()
{
var serializer = AvroSerializer.Create<MyClass>();
}
非常感谢任何帮助。为什么不支持IEnumerable或解决方法。
答案 0 :(得分:2)
IEnumerable类型尚未枚举,因此其中的数据未知。只有在枚举时才会知道它。例如,当您调用ToArray()或ToList()时会发生这种情况。
由于没有枚举它是没有意义的序列化它,它可能无法在反序列化后枚举,因为没有数据将被保留。
在序列化之前,您必须通过转换为数组或列表或其他一些具体的集合类型来枚举它。