Microsoft Hadoop Avro Serializer不支持IEnumerable <string>

时间:2015-08-19 20:52:58

标签: c# hadoop avro hdinsight

我有一个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或解决方法。

1 个答案:

答案 0 :(得分:2)

IEnumerable类型尚未枚举,因此其中的数据未知。只有在枚举时才会知道它。例如,当您调用ToArray()或ToList()时会发生这种情况。

由于没有枚举它是没有意义的序列化它,它可能无法在反序列化后枚举,因为没有数据将被保留。

在序列化之前,您必须通过转换为数组或列表或其他一些具体的集合类型来枚举它。