2012-09-13 5 views
0

XMLSerialization을 사용하여 클라이언트 기반 Win7 응용 프로그램에서 파이프 통신 프로세스를 통해 우리 서버 (Server 2008 R2)로 데이터를 전달하고 있습니다. 저는이 프로젝트를 포기한 이전 개발자의 노력을 끝내기 위해이 프로젝트에 참여했습니다 ... 그러므로 현재 작동하지 않는 VS2010의 C# 코드를 수정하려고합니다.XMLSerialize 객체 내용에 대한 도움이 필요합니다.

문제는 "public partial class Test"에있는 다음 메서드에서 결과 출력의 전체 serialization을 얻을 수 없다는 것입니다. 우리는 아래의 각 항목과 일치하는 MS Compact Server 데이터베이스 ("Test"라고 함)에 정의 된 테이블을 가지며 두 테이블의 일치하는 TestID를 기반으로 "Channel"테이블에 FK를가집니다. EntityCollection는 "채널"테이블의 관계에 기초한다 : 직렬화 결과 여기

Test T = new Test(NewID, "Test1", "Test_120912-1729", 
      "C:\\Temp\\TestScript_16.txt", TChannels); 

된다 : 여기

public Test(Guid TestID, String TestName, String TestRemarks, String ScriptPath, 
      EntityCollection<Channel> TChannels) 
{ 
    ID = TestID; 
    Name = TestName; 
    Remarks = TestRemarks; 
    Path = ScriptPath; 
    Channels = TChannels; 
} 

은이 방법의 실행에 사용되는 방법의 예이다 과정 :

<DataCore xsi:type="Test"> 
    <ID>bc6a8ef7-c31f-404d-8108-86219d45be63</ID> 
    <Name>Test1</Name> 
    <Remarks>Test_120912-1729</Remarks> 
    <Path>C:\Temp\TestScript_16.txt</Path> 
</DataCore> 

이 처음 네 개의 매개 변수를 미세 직렬화,하지만 마지막합니다 (EntityCollection이) 그렇게 실패합니다. 그러나 "TChannels"자체를 ("Test"함수 외부에서) 직렬화하려고하면 각 테스트 채널의 serialization이 완벽하게 작동합니다. 이 문제를 해결하기 위해 XML 직렬화를 사용하는 데 필요한 제한 사항/요구 사항을 완전히 이해하지 못했습니다. 함수 내에서 EntityCollection <을 직렬화 할 수없는 이유는 무엇입니까?

도움 주셔서 감사합니다.

+0

이는 XmlSerializer가 자식 엔티티를로드되지 관련이있을 수 있습니다 - 그들은 게으른로드 기본적으로 있습니다. Channels.IsLoaded의 상태는 무엇입니까? 직렬화를 시도하기 전에 Channels.Load()를 시도 했습니까? –

+0

Channels.IsLoaded가 "거짓"입니다. 제안에 따라, w 직렬화 이전에 행을 삽입하려고하면 "Channels.Load();" , VS 컴파일러는 " '채널'에는 '로드'에 대한 정의가 포함되어 있지 않습니다. 이것은 나에게 단서가되어야하지만, 나는 'Load()'정의를 처리하기 위해 무엇을해야하는지 모른다. 이 시점에 도움을 주셔서 감사합니다! – David

+0

클래스가 EF가 아닌 경우 LoadProperty를 대신 사용해야 할 수도 있습니다. http://msdn.microsoft.com/en-us/library/dd395523 및 http://msdn.microsoft.com/en-us/library/ bb896272 % 28v = vs.100 % 29. 지난 번에 그 점을 발견하지 못해서 미안해. 또 다른 가능성은 자식 관계를로드 할 필요가 없다고 생각하지 않지만 일반 XmlSerializer를 DataContractSerializer로 바꾸는 것입니다. http://stackoverflow.com/questions/6234290/serialize-entity-framework-object-with-children -to-xml-file. 미안하지만 나는 더 구체적 일 수 없다. –

답변

0

마침내 위의 문제에 대한 해결책을 발견했습니다. 많은 제안이 인정되었지만, 그들 중 누구도 자식 EntityCollection을 XmlSerialize 할 수 없다는 해결책을 제공하지 못했습니다. 내가 Model.Designer.cs 파일, 내 데이터베이스에 코드를 생성 깊이 파고와 ADO.NET 프레임 워크에보고하고 자동차 내에서 발견되는 [XmlIgnoreAttribute()] 내 시험에서 탐색 속성의 시작 (EdmEntityTypeAttribute) 근처 .

단순히 [XmlIgnoreAttribute()] 줄을 완전히 제거 했으므로 이제 EntityCollection <>의 "채널"에있는 모든 자식 개체가 올바르게 serialize됩니다. 나는 이것이 또한 자식 객체를 직렬화 할 수없는 다른 사람들을 도울 수 있기를 바랍니다.

감사 @ 데이브 R.는