1

개체 그래프를 직렬화하려고합니다. 엔티티 집합 인 하위 엔티티를로드 할 때까지 작동합니다. 시스템에서 직렬화를 허용하지 않습니다 ...이 오류가 발생합니다 :Linq하려면 SQL 개체 및 직렬화 문제

형식 'System.Data.Linq.EntitySet`1 [NetDataContractSerializerTest.JobService]'을 (를) 직렬화 할 수 없습니다. DataContractAttribute 특성으로 표시하고 DataMemberAttribute 특성을 사용하여 직렬화 할 모든 구성원을 표시하는 것이 좋습니다. 형식이 컬렉션 인 경우 컬렉션에 CollectionDataContractAttribute를 표시하는 것이 좋습니다. 다른 지원되는 유형은 Microsoft .NET Framework 설명서를 참조하십시오. 나는

dataloadOptions.LoadWith(j => j.JobServices)

데이터가 그대로 JN 및 NH 테이블 직렬화를 분리 한 경우

 DataClasses1DataContext dataAccessContext = new DataClasses1DataContext(); 
     MemoryStream stream = new MemoryStream(); 

     DataLoadOptions dataloadOptions = new DataLoadOptions(); 
     dataloadOptions.LoadWith<JN>(j => j.nh); 
     dataloadOptions.LoadWith<JN>(j => j.JobServices);// this is the child entity set 

     dataAccessContext.LoadOptions = dataloadOptions; 

     var jn= dataAccessContext.JN.Where(j => j.LocnID.Trim() == "HT").ToList(); 
     var netDataContractSerializer = new NetDataContractSerializer(); 
     netDataContractSerializer.Serialize(stream, jn); //the error happens here 

: 여기

내가 사용하고있는 코드입니다. 하지만 넣어 때

dataloadOptions.LoadWith(j => j.JobServices)

다시 오류가 발생합니다.

나는 개인적으로, 불행하게도 나는

dataloadOptions.LoadWith(j => j.JobServices.ToList())

이 오류가 발생 할 수 없어이 나를 JobServices에 ToList()를 추가하고 싶은 생각합니다.

아이디어가 있으십니까?

답변

0

오류 메시지는 매우 유익합니다. JobService 클래스가 데이터 계약으로 직렬화되도록 표시되어 있지 않습니다.

속성을 DataContractAttribute으로 꾸미고 DataMember 속성으로 멤버를 장식해야합니다.

[DataContract] 
public class JobService 
{ 
    [DataMember] 
    public string SomeProperty { get; set;} 

} 
+0

그것은 Linq에 엔티티 세트의 아래 링크를 확인 DataContractSerializer, XMLWriter가와의 XMLReader

을 사용하여 직렬화 및 역 직렬화 기능을 썼다 .... .. dbml을 Unidirectional로 설정할 때 아직 완료되지 않았습니까? –