XML属性被反序列化空
我试图反序列化下面的XML:XML属性被反序列化空
<nsMain:Parent xmlns:nsMain="http://main.com"> <nsMain:Child xmlns:nsSub="http://sub.com" nsSub:value="foobar" />
</nsMain:Parent>
注意属性的命名空间比这两个元素的命名空间不同。
我有两个类:
[XmlRoot(ElementName = "Parent", Namespace = "http://main.com")] public class Parent
{
[XmlElement(ElementName = "Child")]
public Child Child{ get; set; }
}
[XmlType(Namespace = "http://sub.com")]
public class Child
{
[XmlAttribute(AttributeName = "value")]
public string Value { get; set; }
}
的XML是作为一个HTTP POST请求的身体,里面HttpRequestMessage对象。对于反序列化功能是:
private Parent ExtractModel(HttpRequestMessage request) {
var serializer = new XmlSerializer(typeof(Parent));
var model = (Parent)serializer.Deserialize(request.Content.ReadAsStreamAsync().Result);
return model;
}
然而,在调用这个函数似乎model.Child.Value == null
后。我试图用C#属性的名称空间参数对类和属性进行实验(例如,将它移动到[XmlAttribute],或者放在[XmlType]和[XmlAttribute]中),但它没有改变任何东西。我似乎无法做到这一点。如果我根本不使用命名空间(无论是在请求中还是在模型定义中),那么这个值就会很好。
我错过了什么?
回答:
你申请你的命名空间"http://sub.com"
元素Child
,而不是它的value
属性。在您的XML中,您特别将"http://main.com"
应用于Parent
和Child
。你可以像这样修复你的命名空间:
[XmlRoot(ElementName = "Parent", Namespace = "http://main.com")] public class Parent
{
[XmlElement(ElementName = "Child")]
public Child Child{ get; set; }
}
[XmlType(Namespace = "http://main.com")]
public class Child
{
[XmlAttribute(AttributeName = "value", Namespace = "http://sub.com")]
public string Value { get; set; }
}
以上是 XML属性被反序列化空 的全部内容, 来源链接: utcz.com/qa/264241.html