代码示例
以下控制台应用程序在.NET Framework 4.7.2项目中不会引发异常: public enum MyEnum
{
One,
}
public class ValueContainer
{
public object Value;
}
class Program
{
static void Main(string[] args)
{
XmlSerializer newSerializer = XmlSerializer.FromTypes(
new[] { typeof(ValueContainer)})[0];
var instance = new ValueContainer();
instance.Value = MyEnum.One;
using (var memoryStream = new MemoryStream())
{
newSerializer.Serialize(memoryStream, instance);
}
}
}
。NET Core 3.0控制台应用程序中的完全相同的代码在调用Serialize
时引发以下异常:
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(Stream stream, Object o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o)
at CoreXml.Program.Main(String[] args) in C:\Users\vchel\source\repos\CoreXml\CoreXml\Program.cs:line 28
Inner Exception 1:
InvalidOperationException: The type CoreXml.MyEnum may not be used in this context.
我在代码中做错了吗? .NET Framework和.NET Core之间是否有重大变化?
是否有解决方法?
更新
我应该指出,在.NET 4.7.2中进行序列化时,我得到以下(所需)Value的输出: <Value xsi:type="xsd:int">0</Value>
我希望为.NET Core提出任何解决方案,以输出相同的XML,因为我需要保持与不使用.NET Standard的应用程序的现有文件和旧版本的兼容性。
摘要.NET Core应用程序无法XML序列化包含枚举值的对象,而.NET Framework(4.7.2)成功。这是已知的重大更改吗?如果是,我如何解决它?代码...