0

我在尝试解析 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>
        ....

对于普通文件:

        ....
        <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:getcontenttype>text/html; charset=utf-8</D:getcontenttype>
        ....

我想将其解析为具有以下属性的 ac# 对象:

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

例如,Type = "collection" 表示集合。

我该怎么做?对于我发布的部分,我的 C# 代码看起来像这样(但没有做我想要的):

    [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;
        }
    }
4

2 回答 2

1

检查此链接:我已测试此代码从代码中删除 FirtsColumn、SecondColumn 并根据您的要求使用xmlDS

XML 解析

于 2014-08-22T10:44:21.500 回答
0

您可以将字符串类型更改为 ResourceType 字段的对象类型。您还需要用 XmlType 属性装饰 ResourceType 字段。您按目标指定 XmlType 属性(在您的情况下为 2)。

您还需要创建两种类型:

  • 一个为字符串,
  • 一为收藏。

但是您可以使用两个更简单的解决方案:

于 2013-10-14T13:26:44.853 回答