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

Sam*_*Sam 3 linq serialization c#-4.0

我想序列化分组列表。但我收到错误。是否可以序列化分组列表?如果是的话怎么办?

错误 :

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]].
Run Code Online (Sandbox Code Playgroud)

代码 :

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);
Run Code Online (Sandbox Code Playgroud)

Mar*_*l B 6

你可以\xe2\x80\x99t序列化Interfaces,因为没有办法恢复它们。对于反序列化类似new IGrouping()需要类似的东西,而 \xe2\x80\x99s 是不可能的。因此,您必须构建自己的分组结构,其中包含组名称及其元素。

\n\n
listElements.GroupBy(member=> member.Type)\n            .Select(g => new MyGrouping() {GroupName = g.Key, Elements = g.ToList()})\n            .ToList();\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n

MyGrouping 可能如下所示:

\n\n
public class MyGrouping\n{\n    public string GroupName { get; set; }\n\n    public List<Element> Elements { get; set; }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者当你想要扁平化的 XML 实现一些接口时:

\n\n
public class MyGrouping : Collection<Element>, IGrouping<string, Element>\n{\n    \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n