c# – 如何使用XmlSerializer使用命名空间反序列化xml文档?
发布时间:2020-12-16 00:18:00 所属栏目:百科 来源:网络整理
导读:使用XmlSerializer反序列化文档时,未正确反序列化 文献 ?xml version="1.0"?ns0:ElementA xmlns:ns0="urn:some-namespace" Prop1Some Value/Prop1 Prop2Some other value/Prop2/ns0:ElementA 类 [XmlRoot(Namespace = "urn:some-namespace")]public clas
使用XmlSerializer反序列化文档时,未正确反序列化
文献 <?xml version="1.0"?> <ns0:ElementA xmlns:ns0="urn:some-namespace"> <Prop1>Some Value</Prop1> <Prop2>Some other value</Prop2> </ns0:ElementA> 类 [XmlRoot(Namespace = "urn:some-namespace")] public class ElementA { [XmlElement] public string Prop1 { get; set; } [XmlElement] public string Prop2 { get; set; } } 在反序列化结束时,Prop1和Prop2都为空. 我无法更改文档的结构以摆脱命名空间,因此我需要正确地处理反序列化. 该文件已经简化以便复制 我应该如何设置ElementA上的属性来正确处理反序列化? – 这是重现问题的完整代码 – namespace ConsoleApplication1 { using System; using System.IO; using System.Xml.Serialization; public class Program { [XmlRoot(Namespace = "urn:some-namespace")] public class ElementA { [XmlElement] public string Prop1 { get; set; } [XmlElement] public string Prop2 { get; set; } } static void Main(string[] args) { var element = "<?xml version="1.0"?>" + Environment.NewLine + "<ns0:ElementA xmlns:ns0="urn:some-namespace">" + Environment.NewLine+ " <Prop1>Some Value</Prop1>" + Environment.NewLine + " <Prop2>Some other value</Prop2>" + Environment.NewLine + "</ns0:ElementA>"; XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(ElementA) })[0]; ElementA result; using (var reader = new StringReader(element)) { result = serializer.Deserialize(reader) as ElementA; } Console.WriteLine("Prop1: " + result.Prop1); Console.WriteLine("Prop2: " + result.Prop2); Console.ReadKey(); } } } 解决方法
最初发布为评论,因为我还没有验证,但是:
<Prop1>Some Value</Prop1> 是不一样的 <ns0:Prop1>Some Value</ns0:Prop1> 为了使它工作,你可能只需要: [XmlElement(Namespace="")] public string Prop1 { get; set; } [XmlElement(Namespace="")] public string Prop2 { get; set; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |