gpt4 book ai didi

c# - 如何使用 XmlSerializer 反序列化带有命名空间的 xml 文档?

转载 作者:行者123 更新时间:2023-11-30 13:23:55 25 4
gpt4 key购买 nike

使用 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 均为 null。

我无法更改文档的结构来摆脱命名空间,因此我需要在我这边正确处理反序列化。

为了复制的目的,文档已经被简化

我应该如何设置 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; }

关于c# - 如何使用 XmlSerializer 反序列化带有命名空间的 xml 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795958/

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