加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读