需要有关XMLSerialize对象内容的帮助

时间:2012-09-13 20:50:42

标签: c# xml-serialization entitycollection

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

问题是我无法从“公共部分类测试”中的以下方法获得结果输出的完整序列化。我们在MS Compact Server数据库中定义了一个表(名为“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”(在“Test”函数之外),则每个测试通道的序列化都可以完美地工作。我不完全理解利用XMLserialization来解决这个问题的限制/要求。为什么我无法序列化EntityCollection&lt; &GT;从函数内部?

感谢您的协助!

1 个答案:

答案 0 :(得分:0)

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

我完全删除了[XmlIgnoreAttribute()]行,现在从EntityCollection&lt;&gt;中删除了“Channels”的所有子对象。正确序列化。我希望这可以帮助那些也无法序列化子对象的人。

谢谢@Dave R。