【问题标题】:How To deserialize an Atom feed using DataContracts如何使用 DataContracts 反序列化 Atom 提要
【发布时间】:2013-07-09 15:12:09
【问题描述】:

我正在尝试使用带有 Datacontract 类的 Atom 提要强制转换 XML,但我失败了......

我的代码如下:

Content.ReadAsAsync<ArticleDTOs>()

      [Serializable]
 [DataContract(Namespace = "urn:schemas-something:some", Name = "document")]
    public class ArticleDTOs  
    {

        [DataMember(Name = "entry")]
        public entry entry { get; set; }

        }

    [Serializable]
    [DataContract(Namespace ="http://www.w3.org/2005/Atom")]
    public class entry
    {
    [DataMember(Name = "id")]
        public string id { get; set; }

     }
}

我感觉问题与

中的命名空间声明有关

datacontract....我应该如何设置命名空间以正确读取 XML 命名空间???

这是我必须反序列化的 XML

<?xml version="1.0" encoding="utf-8"?>

<document id="m.fy7c2fsvzxtv" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="urn:schemas-something:some">

<atom:entry><atom:id>m.fy7c2fsvzxtv</atom:id><atom:title>test title</atom:title><atom:published>2013-07-08T17:21:06.4035574+01:00</atom:published><atom:updated>2013-07-08T17:21:06.4050577+01:00</atom:updated><subheadline>test sub headline</subheadline><standfirst>desc</standfirst><keywords>keywords</keywords>

<atom:content>body with Encoding </atom:content></atom:entry></document>

【问题讨论】:

  • atom:id 也在 Atom 命名空间中。你需要在你的课堂上指定这个吗?您是否收到特定错误?
  • 没有抛出异常,但是具有不同命名空间的属性设置为null,改变它工作的命名空间......据我所知,DataContractSerializer 不支持多个命名空间......我已经决定使用 XmlSerializer 性能最差但更灵活且支持更广泛的语法...

标签: c# xml datacontractserializer datacontract atom-feed


【解决方案1】:

我没有足够的声誉来发表评论,否则我会在 cmets 中要求澄清......

根据您必须反序列化的示例 XML,双引号 (") 在版本、编码和 id 属性中被转义。如图所示,这不是有效的 XML。

XML 是您自己程序的输出吗?如果是这样,找出它在哪里转义字符并在写入输出时阻止它这样做。

如果这是您必须使用的文件,那么我建议删除所有转义双引号的反斜杠:

// We have to escape the backslash and the quote both, with a backslash
xmlString.Replace("\\\#","\#");

也许这可以解决您的问题?

最后,您只提到您的代码“失败”,并且未能提供任何类型的异常或错误消息...如果上述解决方案不适合您,请提供有关您的代码如何失败的更多详细信息.

【讨论】:

  • 嗨亚当,问题与 XML 无关,来自复制和粘贴的“\”...当我说它无法取消实现时,这意味着它无法MAP ArticleDTO 类上的入口对象....我做了很多实验,似乎问题与命名空间有关....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多