C# Microsoft Hadoop Avro序列化程序不支持IEnumerable<;字符串>;

C# Microsoft Hadoop Avro序列化程序不支持IEnumerable<;字符串>;,c#,hadoop,avro,azure-hdinsight,C#,Hadoop,Avro,Azure Hdinsight,我有一个simlpe类,它的属性类型为IEnumerable,同时尝试创建一个带有反射的序列化程序(请参阅),但失败了,出现以下异常 找不到的任何匹配的已知类型 'System.Collections.Generic.IEnumerable'1[System.String]' 但当使用字符串[]而不是IEnumerable时,它会起作用 使用的类 [DataContract] public class MyClass { [DataMember] public string Fi

我有一个simlpe类,它的属性类型为IEnumerable,同时尝试创建一个带有反射的序列化程序(请参阅),但失败了,出现以下异常

找不到的任何匹配的已知类型 'System.Collections.Generic.IEnumerable'1[System.String]'

但当使用字符串[]而不是IEnumerable时,它会起作用

使用的类

[DataContract]
public class MyClass
{
    [DataMember]
    public string Field1;

    [DataMember]
    //public string[] Array1; This works
    public IEnumerable<string> Array1; //this doesn't
}
[DataContract]
公共类MyClass
{
[数据成员]
公共字符串字段1;
[数据成员]
//公共字符串[]数组1;这是有效的
public IEnumerable Array1;//这不是
}
代码

public void CreateSerializer()
{
var serializer=AvroSerializer.Create();
}

非常感谢您的帮助。为什么不支持IEnumerable或解决方法。

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

因为它还没有被枚举,所以序列化它是没有意义的,在它被反序列化之后可能无法被枚举,因为没有数据被保留


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

这方面有什么新闻吗?我正要让它序列化它,但反序列化它不起作用。我得到了一个类似的错误,关于列表的
无已知类型。结果表明,集合中使用的每个类型都需要一个属性。对我来说,我在类中添加了
[KnownType(typeof(List))]
,就在
[DataContract]
下面。我猜,
[KnownType(typeof(IEnumerable)]
可能会起作用。奇怪的是,对于
string
s,它不起作用。同样的错误,generator没有发布[KnownType]的完整列表(…对于数组(我的类型是两个嵌套数组,)。
public void CreateSerializer()
{
    var serializer = AvroSerializer.Create<MyClass>();
}