gpt4 book ai didi

c# - 反序列化错误 - 未设置对象引用

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:18 25 4
gpt4 key购买 nike

我正在尝试在 c#3.5 中反序列化一个 xml 字符串,下面的代码在 c#4.0 中确实有效。当我尝试在 c#3.5 中的代码中运行时,当代码尝试初始化 XmlSerializer 时,我得到一个 Object reference not set to an instance of an object 异常。

如有任何帮助,我们将不胜感激。

string xml = "<boolean xmlns=\"http://schemas.microsoft.com/2003/10/serialization/\">false</boolean>";
var xSerializer = new XmlSerializer(typeof(bool), null, null,
new XmlRootAttribute("boolean"),
"http://schemas.microsoft.com/2003/10/serialization/");

using (var sr = new StringReader(xml))
using (var xr = XmlReader.Create(sr))
{
var y = xSerializer.Deserialize(xr);
}

System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="System.Xml"
StackTrace:
at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, String defaultNamespace, String location, Evidence evidence)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, String defaultNamespace)
....
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

最佳答案

看起来在 .NET 3.5 中它不喜欢 Type[] extraTypes 为 null。只需传递一个空的 Type[],例如 new Type[0],或者只是简单地:

var xSerializer = new XmlSerializer(typeof(bool), null, Type.EmptyTypes, 
new XmlRootAttribute("boolean"),
"http://schemas.microsoft.com/2003/10/serialization/");

附带说明:在使用非平凡构造函数(如这个构造函数)创建 XmlSerializer 实例时,缓存和重新使用序列化程序非常重要 -否则它会为每个序列化程序生成一个内存中的程序集,这 a: 对性能不利,但 b: 导致严重的内存泄漏(无法卸载程序集)。

关于c# - 反序列化错误 - 未设置对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com