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

C# 反序列化错误-未设置对象引用,c#,deserialization,C#,Deserialization,我试图在c#3.5中反序列化一个xml字符串,下面的代码在c#4.0中确实有效。 当我尝试在c#3.5中的代码中运行时,当代码尝试初始化XmlSerializer时,我得到一个对象引用未设置为对象的实例异常 任何帮助都将不胜感激 string xml = "<boolean xmlns=\"http://schemas.microsoft.com/2003/10/serialization/\">false</boolean>"; var xSerializer = ne

我试图在c#3.5中反序列化一个xml字符串,下面的代码在c#4.0中确实有效。 当我尝试在c#3.5中的代码中运行时,当代码尝试初始化XmlSerializer时,我得到一个
对象引用未设置为对象的实例
异常

任何帮助都将不胜感激

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: 
stringxml=“false”;
var xSerializer=新的XmlSerializer(typeof(bool),null,null,
新的XmlRootAttribute(“布尔”),
"http://schemas.microsoft.com/2003/10/serialization/");
使用(var sr=newstringreader(xml))
使用(var xr=XmlReader.Create(sr))
{
var y=xSerializer.Deserialize(xr);
}
System.NullReferenceException未处理
Message=“对象引用未设置为对象的实例。”
Source=“System.Xml”
堆栈跟踪:
位于System.Xml.Serialization.XmlSerializer..ctor(类型类型,XmlAttributeOverrides重写,类型[]外部类型,XmlRootAttribute根,字符串defaultNamespace,字符串位置,证据)
位于System.Xml.Serialization.XmlSerializer..ctor(类型类型,XmlAttributeOverrides重写,类型[]外部类型,XmlRootAttribute根,字符串defaultNamespace)
....
位于System.AppDomain.\u nexecutestAssembly(程序集,字符串[]args)
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)
位于System.Threading.ThreadHelper.ThreadStart()处
内部异常:

在.NET3.5中,它似乎不希望
类型[]外部类型
为空。只需传递一个空的
类型[]
,例如
新类型[0]
,或者只需:

var xSerializer = new XmlSerializer(typeof(bool), null, Type.EmptyTypes, 
                 new XmlRootAttribute("boolean"),
                 "http://schemas.microsoft.com/2003/10/serialization/");
附带说明:当使用非平凡构造函数(如此构造函数)创建
XmlSerializer
实例时,缓存和重用序列化程序非常重要,否则它会为每个序列化程序生成内存中的程序集,这对性能不利,但会导致严重的内存泄漏(程序集无法卸载)。

没有C#3.5这样的东西——你大概是说.NET 3.5/.NET 4.0?