是否可以序列化分组列表?

时间:2014-07-24 06:39:48

标签: linq c#-4.0 serialization

我想序列化分组列表。但我收到了错误。是否可以序列化分组列表?如果是,那么如何?

错误:

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);

1 个答案:

答案 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>
{
    …
}