C# 通过XmlReader解析XML:将XMLElement名称读取为字符串

C# 通过XmlReader解析XML:将XMLElement名称读取为字符串,c#,xml,serialization,webdav,C#,Xml,Serialization,Webdav,我在尝试解析WebDAV应用程序的响应时遇到问题。 响应的相关部分如下所示: 对于集合: .... <D:getlastmodified xmlns:B="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" B:dt="dateTime.rfc1123">Tue, 15 Jan 2013 15:47:30 GMT</D:getlastmodified> <D:displayn

我在尝试解析WebDAV应用程序的响应时遇到问题。 响应的相关部分如下所示: 对于集合:

        ....
        <D:getlastmodified xmlns:B="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" B:dt="dateTime.rfc1123">Tue, 15 Jan 2013 15:47:30 GMT</D:getlastmodified>
        <D:displayname>aaa.bc</D:displayname>
        <D:resourcetype>
           <D:collection />
        </D:resourcetype>
        <D:getcontenttype>text/html; charset=utf-8</D:getcontenttype>
        ....
其中,例如,对于集合,Type=“collection”

我该怎么做?对于我发布的部分,我的C#代码如下所示(但不是我想要的):

以及解析所有内容的方法:

 private T ParseWebDavXml<T>(string xml)
    {
        using (var reader = XmlReader.Create(new StringReader(xml)))
        {
            var serializer = new XmlSerializer(typeof(T), "DAV:");
            var result = (T)serializer.Deserialize(reader);
            return result;
        }
    }
private T ParseWebDavXml(字符串xml)
{
使用(var reader=XmlReader.Create(newstringreader(xml)))
{
var serializer=newxmlserializer(typeof(T),“DAV:”);
var result=(T)序列化程序。反序列化(读取器);
返回结果;
}
}

您可以将ResourceType的字符串类型更改为对象类型。您还需要用XmlType属性修饰ResourceType。您可以按目标指定XmlType属性(在本例中为2)

您还需要创建两种类型:

  • 一根绳子
  • 一个用于收集
但您可以使用两种更简单的解决方案:

  • 生成一个XSD和与此XSD对应的C#类:请参见
  • 直接定义表,而不是字符串字段

检查此链接:我已经测试了此代码 从代码中删除第一列、第二列,并根据您的要求使用xmlDS

[XmlElement("resourcetype")]
public string Type {get;set;}
    [XmlRoot("prop")]
    public class Prop
    {
        [XmlElement("creationdate")]
        public string CreationDate { get; set; }

        [XmlElement("getlastmodified")]
        public string LastModified { get; set; }

        [XmlElement("displayname")]
        public string DisplayName { get; set; }

        [XmlElement("resourcetype")]
        public string ResourceType { get; set; }

        [XmlElement("getcontenttype")]
        public string ContentType { get; set; }

        [XmlElement("getcontentlength")]
        public string ContentLength { get; set; }

        [XmlElement("getetag")]
        public string ETag { get; set; }

        [XmlElement("imagewidth")]
        public string ImageWidth { get; set; }

        [XmlElement("imageheight")]
        public string ImageHeight { get; set; }

        [XmlElement("thumbnailuri")]
        public string TumbnailUri { get; set; }

    }

    [XmlRoot("resourcetype")]
    public class ResourceType
    {
        [XmlElement("collection")] // TODO
        public string Collection { get; set; }
    }
 private T ParseWebDavXml<T>(string xml)
    {
        using (var reader = XmlReader.Create(new StringReader(xml)))
        {
            var serializer = new XmlSerializer(typeof(T), "DAV:");
            var result = (T)serializer.Deserialize(reader);
            return result;
        }
    }