0

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

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

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

感谢你的协助!

4

1 回答 1

0

我终于找到了解决上述问题的方法。尽管对许多建议表示赞赏,但它们都没有为我无法 XmlSerialize 子 EntityCollection 提供解决方案。我深入挖掘并查看了 ADO.NET 框架,并在我的数据库Model.Designer.cs文件中的自动生成代码中找到了一个 [XmlIgnoreAttribute()],靠近我的测试 (EdmEntityTypeAttribute) 中导航属性的开头。

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

谢谢@Dave R。

于 2012-09-17T23:16:15.583 回答