2014-07-24 4 views
2

그룹화 된 목록을 직렬화하려고합니다. 하지만 오류가 발생했습니다. 그룹화 된 목록을 직렬화 할 수 있습니까? 그렇다면 어떻게?그룹화 된 목록을 직렬화 할 수 있습니까?

오류 :

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

왜 당신이 원하는 수행하는 방법을 그렇게? 그룹화 정보는 중복되어 저장하지 않아도됩니다. 목록을 그룹화하지 않고 저장하고 비 직렬화 할 때 그룹을 추가 할 수 있습니다. –

+0

실제로 그룹화 된 요소가있는 XML 파일을 생성하고 싶습니다. 나는 그것을 할 수있는 많은 방법이 있다는 것을 압니다. 하지만 제 질문은 "그룹화 된 목록을 직렬화 할 수 있습니까?" – Sam

+0

예.하지만 그룹 구조/클래스를 직접 작성해야합니다. 인터페이스를 직렬화 할 수 없기 때문입니다. 어떻게 deserialization 작동합니까? 인터페이스이기 때문에 새로운 IGrouping()을 할 수 없습니다. –

답변

2

복원 할 수있는 방법이 없기 때문에 당신은 Interface의 직렬화 수 없습니다. 역 직렬화의 경우 new IGrouping()과 같은 것이 필요하며 이는 불가능합니다. 따라서 그룹 이름과 그 요소를 포함하는 고유 한 그룹화 구조를 만들어야합니다.

listElements.GroupBy(member=> member.Type) 
      .Select(g => new MyGrouping() {GroupName = g.Key, Elements = g.ToList()}) 
      .ToList(); 

편집 :

public class MyGrouping 
{ 
    public string GroupName { get; set; } 

    public List<Element> Elements { get; set; } 
} 

또는 당신이 원하는 때 평평 XML 일부 인터페이스 구현 :

MyGrouping는 다음과 같이 할 수

public class MyGrouping : Collection<Element>, IGrouping<string, Element> 
{ 
    … 
} 
+0

MyGrouping이란 무엇입니까? 어떻게 이것을 내 코드에 정리할 수 있습니까? – Sam

+0

그룹화 정보와 요소를 보유하고있는 클래스이며 직렬화 및 비 직렬화가 가능합니다. 직접 작성해야합니다. –

+0

ASP.Net 웹 API에서이 방법을 사용하기 위해 메서드를 사용했습니다. 1 년에 몇개의 이벤트를 그룹화해야합니다. 내 웹 API는 단순히 : 공공는 IEnumerable GetProductEvents() { IEnumerable을 그룹 = DB .Products 이 .GroupBy (X => x.EventDateTimeUTC.Year) ALL 기타 사항 서보 -OFF (g => 새로운 MyGrouping {년도 = g .Key, Events = g.ToList()}) ; 반품 그룹; } 그런 다음 JQuery 등으로 소비 할 수있는 멋진 XML로드를 얻는다. – mbird

관련 문제