如何从命名空间的xml中提取数据?

时间:2014-02-21 10:26:18

标签: c# xml serialization

属性“version”的数据(“1.0.0”)属于属性。但同一类中的“事件”属性仍为空。 如果从XML中删除命名空间,它将起作用。

我的XML:

<rootnode>
  <ns:eventresponse xmlns:ns="somenamespace" version="1.0.0">
    <event id="694717028">
      <somedata>val</somedata>
    </event>
  </ns:eventresponse>
</rootnode>

我的课程:

[XmlRoot("rootnode")]
public class RootNode
{
    [XmlElement(ElementName = "eventresponse", Namespace = "somenamespace")]
    public EventResponseData EventResponse { get; set; }
}

  public class EventResponseData
    {
        [XmlElement("event")]
        public EventData Event { get; set; }

        [XmlAttribute("version")]
        public string Version { get; set; }
    }

public class TvEventData
{
    [XmlAttribute("id")]
    public string EventID { get; set; } 

    [XmlElement("somedata")]
    public string SomeData { get; set; }
}

我的解串器:

using (var reader = XmlReader.Create(new StringReader(xml)))
{
     reader.MoveToContent();
     var obj = (T)new XmlSerializer(typeof(T)).Deserialize(reader);
} 

1 个答案:

答案 0 :(得分:4)

由于名称空间默认,您的event元素隐式位于XML中的同一名称空间中,因此您应在声明中指定:

public class EventResponseData
{
    [XmlElement(ElementName = "event", Namespace = "somenamespace")]
    public EventData Event { get; set; }

    [XmlAttribute("version")]
    public string Version { get; set; }
}