使用StringReader与XmlNodeReader反序列化对象属性

时间:2015-05-07 13:18:54

标签: c# xml serialization xsd xmlserializer

为什么apt-get在使用XmlSerializer反序列化空类型元素时使用XmlNode数组填充我的对象属性,而不是像使用XmlNodeReader时那样使用空字符串(还是StringReader)?

以下代码示例中的第二个断言失败:

XmlTextReader

我猜它与null内部var doc = new XmlDocument(); doc.Load(new StringReader(@" <Test xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <Value xsi:type=""xsd:string"" /> </Test>")); var ser = new XmlSerializer(typeof (Test)); var reader1 = new StringReader(doc.InnerXml); var obj1 = (Test) ser.Deserialize(reader1); Debug.Assert(obj1.Value is string); var reader2 = new XmlNodeReader(doc.FirstChild); var obj2 = (Test) ser.Deserialize(reader2); Debug.Assert(obj2.Value is string); public class Test { public object Value { get; set; } } 属性有关,但我不知道如何解决这个神秘的限制。如何可靠地反序列化我解析的XML文档的子集而不将其转换回字符串并重新解析?

1 个答案:

答案 0 :(得分:1)

看起来这是一个非常古老的mouseUp:错误Microsoft have no intention of fixing。 (存档的Microsoft Connect链接here)。我在Lev Gimelfarb的博客here上找到了一个解决方法,在查找前缀时,将名称空间添加到读者的XmlNodeReader

NameTable
相关问题