Я пытаюсь десериализовать следующий 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
.
Я попытался немного поэкспериментировать с параметром Namespace атрибутов C# в классах и свойствах (например, переместить его в [XmlAttribute] или поместить оба в [XmlType] и [XmlAttribute]), но это ничего не изменило. Кажется, я не могу сделать это правильно. Если я вообще не использую пространство имен (как в запросе, так и в определении модели), то значение читается просто отлично.
Что мне не хватает?