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)
你可以\xe2\x80\x99t序列化Interface
s,因为没有办法恢复它们。对于反序列化类似new IGrouping()
需要类似的东西,而 \xe2\x80\x99s 是不可能的。因此,您必须构建自己的分组结构,其中包含组名称及其元素。
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\nMyGrouping 可能如下所示:
\n\npublic 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\npublic class MyGrouping : Collection<Element>, IGrouping<string, Element>\n{\n \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n