I have a problem while the serialization of objects in C# .NET Core 6. When I try to serialize my objects (which is only intended to generate my XML) it throws the following error:
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.
This is my code to generate the 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;
}
}
The error occurs when the program reaches the line: serializer.Serialize(writer, this);
My first thought was, that it is hanging with the change of .net core´s XmlGenerators (https://docs.microsoft.com/de-de/dotnet/core/additional-tools/xml-serializer-generator).
But I added the package and it throws the same error again.
There is no inner exception which tells me what exactly the problem is. Does anyone know this error? Or is there an alternative way to generate my xml?
(I know these are different classes/implementations, but the serialization of my objects as a JSON works very well).
CodePudding user response:
After I serialized each child object, I could determine the error source.
The XmlSerializer
class can not process static properties and properties without a setter.
In this case the XmlSerializer
is not able to produce a valid/understandable error message. Now I set the values of my properties inside the constructor to achieve a predefined value for my property.