我正在尝试将 List 动态序列化为 Xml。我可以这样做,只要我没有 ICollection 作为 T 的属性。
我想在将 ICollection 类型写入 Xml 之前将其动态覆盖到 List 中。
这就是我到目前为止所拥有的。
List<-XmlElementAttribute-> attrToConvertList = new List<-XmlElementAttribute->();
foreach (var propertyInfo in typeof(T).GetProperties())
{
if (propertyInfo.PropertyType.Name == "ICollection`1")
{
XmlElementAttribute attrToConvert = new XmlElementAttribute();
attrToConvert.ElementName = propertyInfo.Name;
attrToConvert.Type = typeof(List<>);
attrToConvert.Type = attrToConvert.Type.MakeGenericType(propertyInfo.PropertyType.GetGenericArguments()[0]);
attrToConvertList.Add(attrToConvert);
}
}
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToConvert = new XmlAttributes();
foreach (var xmlElementAttribute in attrToConvertList)
attributesToConvert.XmlElements.Add(xmlElementAttribute);
overrides.Add(typeof(T), attributesToConvert);
XmlSerializer serializer = new XmlSerializer(typeof(List<T>), overrides);
我收到无法序列化类型 ICollection 的错误,因为它是一个接口。我的印象是,我对 XmlAttributeOverrides 所做的事情应该将 ICollection 覆盖为类型列表。