我正在使用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;从函数内部?
感谢您的协助!
答案 0 :(得分:0)
我终于找到了解决上述问题的方法。虽然很多建议都得到了赞赏,但它们都没有提供解决我无法对XmlSerialize子EntityCollection的方法。我深入挖掘并查看ADO.NET框架,并在我的数据库 Model.Designer.cs 文件中的自动生成的代码中找到,附近的[XmlIgnoreAttribute()]我的测试中的导航属性的开头(EdmEntityTypeAttribute)。
我完全删除了[XmlIgnoreAttribute()]行,现在从EntityCollection&lt;&gt;中删除了“Channels”的所有子对象。正确序列化。我希望这可以帮助那些也无法序列化子对象的人。
谢谢@Dave R。