我有一个simlpe类,它的属性类型为ienumerable,当尝试创建一个带有反射的序列化程序(请参见microsoft.net sdk for hadoop)时,它失败了,出现以下异常。
找不到任何与“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
}
代码
public void CreateSerializer()
{
var serializer = AvroSerializer.Create<MyClass>();
}
非常感谢您的帮助。为什么不支持ienumerable或解决方法。
1条答案
按热度按时间sbtkgmzw1#
ienumerable类型尚未枚举,因此其中的数据未知。只有当它被枚举时才知道。例如,在调用toarray()或tolist()时会发生这种情况。
因为它还没有被枚举,所以序列化它是没有意义的,在它被反序列化之后可能无法被枚举,因为没有数据被保留。
在序列化之前,必须通过转换为数组、列表或其他具体集合类型来枚举它。