0

我们有一个主要用 4.0 编写的 WinForms 应用程序,它在将 C# 对象序列化为 Xml 时遇到了重大问题。进行序列化的组件是 3.5,但这应该不是问题。

使用 Visual Studio 在调试模式下运行很好,但是当我们从 .exe 运行应用程序时,我们在序列化为 Xml 时会收到以下错误:

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidProgramException: Common Language Runtime detected an invalid program.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write53_FrmTable(String n, String ns, FrmTable o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write55_FrmFrm(String n, String ns, FrmFrm o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write56_frm(Object o)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o)

我尝试了许多不同的序列化到 Xml 的方法,但似乎没有任何改变结果,XmlSerializer.Serialize 调用总是中断。这是我们的特别呼吁:

XmlSerializer serializer = new XmlSerializer(obj.GetType());
XDocument xmlDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
using (XmlWriter documentWriter = xmlDocument.CreateWriter())
{
    serializer.Serialize(documentWriter, obj);
}
return xmlDocument;

值得注意的是,我们只在安装了 .net 4.5 的机器上遇到这个问题。如果我把它取下来并放上 4.0 就可以了。我还尝试在 app.config 中强制使用 .net 版本:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

但也无济于事。

如果有人可以帮助解决这个问题,我将非常感激。

4

0 回答 0