为什么XmlSerializer无法使用根元素中指定的模式反序列化xml

时间:2014-03-26 15:14:22

标签: c# .net xml xml-deserialization

我有一个类似于他的

的xml
<ns2:person xmlns:ns2="somenamespace">
  <firstName>John</firstName>
  <lastName>John</lastName>
</ns2:person>

我试着像这样反序列化:

var ser = new XmlSerializer(typeof(Person));
b = (Person)ser.Deserialize(new StringReader(xml));

T是一个班级

[XmlRoot(Name = "person", Namespace = "somenamespace")]
public class Person {
    [XmlElement(ElementName = "firstName")]
    public string fistName {get;set;}
    [XmlElement(ElementName = "lastName")]
    public string lastName {get;set;}
}

创建对象后,它的属性保持为空

如果删除<person>...

之类的架构,则同样的示例有效

不幸的是我无法控制源xml,我需要了解其背后的原因并找出除了更改xml字符串(如果有的话)之外的解决方法。

1 个答案:

答案 0 :(得分:3)

添加命名空间=&#34;&#34;到XmlElement属性

[XmlRoot(ElementName = "person", Namespace = "somenamespace")]
public class Person {
  [XmlElement(ElementName = "firstName", Namespace = "")]
  public string fistName { get; set; }
  [XmlElement(ElementName = "lastName", Namespace = "")]
  public string lastName { get; set; }
}