我想序列化分组列表。但我收到了错误。是否可以序列化分组列表?如果是,那么如何?
错误:
Cannot serialize interface System.Linq.IGrouping`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[MyProject.MyNamespace.Elements, MyProject.MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].
代码:
MemoryStream memoryStream = new MemoryStream();
List<IGrouping<string, Elements>> lstGroupedElements = listElements.GroupBy(member=> member.Type).ToList();
XmlSerializer objXmlSerializer = new XmlSerializer(typeof(List<IGrouping<string, Elements>>));
objXmlSerializer.Serialize(memoryStream, lstGroupedElements);
答案 0 :(得分:2)
您无法序列化Interface
,因为无法恢复它们。对于反序列化,需要new IGrouping()
之类的东西,这是不可能的。因此,您必须构建自己的分组结构,该结构包含组名称及其元素。
listElements.GroupBy(member=> member.Type)
.Select(g => new MyGrouping() {GroupName = g.Key, Elements = g.ToList()})
.ToList();
修改
MyGrouping可能如下所示:
public class MyGrouping
{
public string GroupName { get; set; }
public List<Element> Elements { get; set; }
}
或者当你想要一个扁平的XML实现一些接口时:
public class MyGrouping : Collection<Element>, IGrouping<string, Element>
{
…
}