我正在使用XMLSerialization通過管道通信過程將數據從基於客戶端的Win7應用程序傳遞到我們的服務器(Server 2008 R2)。我被引入到這個項目中去完成之前的開發者的努力,他們放棄了它......因此,我目前正在嘗試修復VS2010中的C#代碼,這是行不通的。需要幫助XMLSerialize對象內容
問題是我無法從「public partial class Test」中的以下方法獲得結果輸出的完整序列化。我們在MS Compact Server數據庫(名爲「Test」)中定義了一個表,它與下面的每個項目相匹配,並且基於兩個表中匹配的TestID,對「Channel」表具有FK。 EntityCollection是基於其的「通道」表的關係:
public Test(Guid TestID, String TestName, String TestRemarks, String ScriptPath,
EntityCollection<Channel> TChannels)
{
ID = TestID;
Name = TestName;
Remarks = TestRemarks;
Path = ScriptPath;
Channels = TChannels;
}
這裏是它是如何在方法的執行中使用的樣品:
Test T = new Test(NewID, "Test1", "Test_120912-1729",
"C:\\Temp\\TestScript_16.txt", 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」(在「測試」功能之外),則每個測試通道的序列化都可以很好地工作。我不完全理解利用XMLserialization解決這個問題的限制/要求。爲什麼我無法序列化函數內的EntityCollection <>?
感謝您的協助!
這可能與XmlSerializer的不加載子實體 - 他們是懶加載默認。 Channels.IsLoaded的狀態如何?在嘗試序列化之前你有沒有試過Channels.Load()? –
Channels.IsLoaded是「false」。根據您的建議,w當我嘗試在序列化之前插入一行時,「Channels.Load();」 ,VS編譯器指出「'Channels'不包含'Load'的定義。這應該是我的一個線索,但是,我不知道我該如何處理'Load()'定義。感謝您的幫助! – David
如果您的類不是EF,則可能必須使用LoadProperty:http://msdn.microsoft.com/en-us/library/dd395523和http://msdn.microsoft.com/en-us/library/ bb896272%28V = VS.100%29。對不起,最後一次沒有發現。另一種可能性是用DataContractSerializer替換普通的XmlSerializer,儘管我不認爲這消除了加載子關係的需要:http://stackoverflow.com/questions/6234290/serialize-entity-framework-object-with-children -to-XML文件。對不起,我不能更具體。 –