C# 需要帮助来XMLSerialize对象内容吗

C# 需要帮助来XMLSerialize对象内容吗,c#,xml-serialization,entitycollection,C#,Xml Serialization,Entitycollection,我使用XMLSerialization通过管道通信过程将数据从基于客户端的Win7应用程序传递到服务器(Server2008R2)。我已经被带到这个项目来完成以前的开发人员的努力谁放弃了它。。。因此,我目前正在尝试修复VS2010中不起作用的C#代码 问题是我无法从“公共部分类测试”中的以下方法获得结果输出的完全序列化。我们在MS Compact Server数据库(名为“Test”)中定义了一个表,该表匹配下面的每个项目,并根据两个表中匹配的TestID,将FK设置为“Channel”表。En

我使用XMLSerialization通过管道通信过程将数据从基于客户端的Win7应用程序传递到服务器(Server2008R2)。我已经被带到这个项目来完成以前的开发人员的努力谁放弃了它。。。因此,我目前正在尝试修复VS2010中不起作用的C#代码

问题是我无法从“公共部分类测试”中的以下方法获得结果输出的完全序列化。我们在MS Compact Server数据库(名为“Test”)中定义了一个表,该表匹配下面的每个项目,并根据两个表中匹配的TestID,将FK设置为“Channel”表。EntityCollection基于其与“通道”表的关系:

以下是序列化过程的结果:

<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>

bc6a8ef7-c31f-404d-8108-86219d45be63
测试1
测试120912-1729
C:\Temp\TestScript\u 16.txt
前四个参数序列化很好,但最后一个(EntityCollection)无法序列化。但是,如果我尝试自行序列化“TChannels”(在“Test”函数之外),则每个测试通道的序列化都可以完美地工作。我不完全理解利用XMLserialization解决此问题的限制/要求。为什么我无法从函数中序列化EntityCollection<>


谢谢你的帮助

我终于找到了解决上述问题的办法。虽然很多建议都得到了赞赏,但没有一个能解决我无法对子EntityCollection进行XmlSerialize的问题。我更深入地研究了ADO.NET框架,在我的数据库Model.Designer.cs文件中自动生成的代码中,在我测试的导航属性(EdmEntityTypeAttribute)的开头附近找到了一个[XmlIgnoreAttribute()]

我只是完全删除了[XmlIgnoreAttribute()]行,现在EntityCollection中“Channels”的所有子对象都已正确序列化。我希望这可以帮助其他也无法序列化子对象的人


感谢@Dave R.

这可能与XmlSerializer没有加载子实体有关-默认情况下,它们是延迟加载的。Channel.IsLoaded的状态是什么?在尝试序列化之前是否尝试过Channels.Load()?Channels.IsLoaded为“false”。根据您的建议,当我尝试在序列化之前插入一行“Channels.Load();”时,VS编译器会声明“Channels”不包含“Load”的定义”。这对我来说应该是一个线索,但是,我不知道应该如何处理“Load()”定义。谢谢你在这一点上的帮助!如果您的类不是EF:and,则可能必须使用LoadProperty。很抱歉上次没注意到。另一种可能是用DataContractSerializer替换普通的XmlSerializer,尽管我认为这不会消除加载子关系的需要:。对不起,我不能说得更具体了。谢谢,戴夫。我会调查你的推荐信并探索我的选择。我应该在Model.edmx(“”)中将“LazyLoadingEnabled”更改为“false”吗??
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>