使用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();
}
}
}
答案 0 :(得分:13)
最初发布为评论,因为我还没有验证,但是:
<Prop1>Some Value</Prop1>
与
不同<ns0:Prop1>Some Value</ns0:Prop1>
为了让它正常工作,你可能只需要:
[XmlElement(Namespace="")]
public string Prop1 { get; set; }
[XmlElement(Namespace="")]
public string Prop2 { get; set; }