.NET 6 XmlSerializer 抛出 JIT 编译器错误(无效的 IL 代码)
.NET 6 XmlSerializer throws JIT compiler error (invalid IL code)
我在 C# .NET Core 6 中序列化对象时遇到问题。
当我尝试序列化我的对象(仅用于生成我的 XML)时,它会抛出以下错误:
System.InvalidOperationException
HResult=0x80131509
Message=There was an error generating the XML document.
Source=System.Private.Xml
StackTrace:
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
at CdaForNetCore.V3.Models.CdaModel.ToXmlString() in C:\Users\MyUser\source\repos\cdafornet\CdaForNetCore\V3\Models\CdaModel.cs:line 53
at CdaGenerator.ProtocolGenerator.GenerateAndSendProtocol(Boolean testrun) in C:\Users\MyUser\source\repos\cda\CdaGenerator\ProtocolGenerator.cs:line 184
at CdaGenerator.ProtocolGenerator.GenerateAndSendProtocol(Int64 document_id, ProgressTask& task, Boolean testrun) in C:\Users\MyUser\source\repos\cda\CdaGenerator\ProtocolGenerator.cs:line 28
at Program.<>c__DisplayClass0_2.<<Main>$>b__2() in C:\Users\MyUser\source\repos\cda\CdaGenerator\Program.cs:line 55
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
Inner Exception 1:
InvalidProgramException: The JIT compiler encountered invalid IL code or an internal limitation.
这是我生成 XML:
的代码
XmlSerializer serializer = new XmlSerializer(this.GetType());
string xml = "";
using (MemoryStream stream = new MemoryStream())
{
using (TextWriter writer = new StreamWriter(stream))
{
serializer.Serialize(writer, this);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
xml = Encoding.UTF8.GetString(buffer);
buffer = null;
}
}
程序运行到行时出现错误:serializer.Serialize(writer, this);
我的第一个想法是,它与 .net 核心的 XmlGenerators (https://docs.microsoft.com/de-de/dotnet/core/additional-tools/xml-serializer-generator) 的变化有关。
但是我添加了包,它又抛出了同样的错误。
没有内部异常告诉我到底是什么问题。有谁知道这个错误?或者是否有另一种方法来生成我的 xml?
(我知道这些是不同的 classes/implementations,但是将我的对象序列化为 JSON 效果很好)。
序列化每个子对象后,我可以确定错误源。
XmlSerializer
class 不能 处理静态属性和没有 setter 的属性。
在这种情况下,XmlSerializer
无法生成 valid/understandable 错误消息。现在,我在构造函数中设置我的属性值,以实现 属性.
的预定义值
我在 C# .NET Core 6 中序列化对象时遇到问题。 当我尝试序列化我的对象(仅用于生成我的 XML)时,它会抛出以下错误:
System.InvalidOperationException
HResult=0x80131509
Message=There was an error generating the XML document.
Source=System.Private.Xml
StackTrace:
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
at CdaForNetCore.V3.Models.CdaModel.ToXmlString() in C:\Users\MyUser\source\repos\cdafornet\CdaForNetCore\V3\Models\CdaModel.cs:line 53
at CdaGenerator.ProtocolGenerator.GenerateAndSendProtocol(Boolean testrun) in C:\Users\MyUser\source\repos\cda\CdaGenerator\ProtocolGenerator.cs:line 184
at CdaGenerator.ProtocolGenerator.GenerateAndSendProtocol(Int64 document_id, ProgressTask& task, Boolean testrun) in C:\Users\MyUser\source\repos\cda\CdaGenerator\ProtocolGenerator.cs:line 28
at Program.<>c__DisplayClass0_2.<<Main>$>b__2() in C:\Users\MyUser\source\repos\cda\CdaGenerator\Program.cs:line 55
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
Inner Exception 1:
InvalidProgramException: The JIT compiler encountered invalid IL code or an internal limitation.
这是我生成 XML:
的代码XmlSerializer serializer = new XmlSerializer(this.GetType());
string xml = "";
using (MemoryStream stream = new MemoryStream())
{
using (TextWriter writer = new StreamWriter(stream))
{
serializer.Serialize(writer, this);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
xml = Encoding.UTF8.GetString(buffer);
buffer = null;
}
}
程序运行到行时出现错误:serializer.Serialize(writer, this);
我的第一个想法是,它与 .net 核心的 XmlGenerators (https://docs.microsoft.com/de-de/dotnet/core/additional-tools/xml-serializer-generator) 的变化有关。
但是我添加了包,它又抛出了同样的错误。
没有内部异常告诉我到底是什么问题。有谁知道这个错误?或者是否有另一种方法来生成我的 xml?
(我知道这些是不同的 classes/implementations,但是将我的对象序列化为 JSON 效果很好)。
序列化每个子对象后,我可以确定错误源。
XmlSerializer
class 不能 处理静态属性和没有 setter 的属性。
在这种情况下,XmlSerializer
无法生成 valid/understandable 错误消息。现在,我在构造函数中设置我的属性值,以实现 属性.