gpt4 book ai didi

c# - DataContractSerializer 失败,空数据

转载 作者:太空狗 更新时间:2023-10-29 22:19:40 28 4
gpt4 key购买 nike

我有一些适用于 Windows Phone 7 的 RSS 应用程序代码:

private RSSSettings DeserializeSettings(string data)
{
RSSSettings rsssettings;
try
{
var ser = new DataContractSerializer(typeof(RSSSettings));
using (var sr = new StringReader(data))
using (var xr = XmlReader.Create(sr))
rsssettings = (RSSSettings)ser.ReadObject(xr);
}
catch (Exception ex)
{
ex.ToString();
rsssettings = new RSSSettings() { Version = -1 };
}
return rsssettings;
}

它在 Windows Phone 7 上完美运行。我将该应用程序移植到 Windows Phone 8,除此代码段外,该应用程序中的其他所有内容均正常运行。

比较 Windows Phone 7 和 8 中发生的情况,WP8 中的“rsssettings”在 WP7 中正确填充时仍然为空。这部分代码根本没有任何代码更改。

一切都一样,直到:

rsssettings = (RSSSettings)ser.ReadObject(xr);

没有调用异常。

有人知道如何解决这个令人沮丧的问题吗?

最佳答案

是的,你不会喜欢这个的。

WP8 上的 DataContractSerializer 要求 XML 元素按字母顺序组织。这是因为假设进入 DataContractSerializer 的所有内容都来自另一个 DataContractSerializer。

我希望这是我编造的,但我没有。来自 MSDN 的 App platform compatibility for Windows Phone :

DataContractSerializer class

WP8 Behaviour: XML elements must be sorted alphabetically.

WP7 Behaviour: XML elements can be unordered.

此时您有几个选择:

  1. ̶a̶l̶p̶h̶a̶b̶e̶t̶i̶c̶a̶l̶l̶y̶̶o̶r̶d̶e̶r̶̶y̶o̶u̶̶X̶M̶L̶。不,那真的不是一个选择。
  2. 因为您似乎获得了 RSS,您可以考虑使用 WCF 的 System.ServiceModel.Syndication.SyndicationFeed,它是专门为 RSS/Atom 构建的。关于此的更多信息 great article由 Den Delimarsky 着。
  3. 如果您使用非 RSS XML,请考虑直接使用带有 XmlSerializer 的 Xml 序列化。 .就我而言,这是通过网络进行 XML 序列化和反序列化的最佳和最简单的方法。
  4. 从 WP7 到 WP8 的行为更改是通过 Quirks 模式启用的。这意味着在 WP8 上运行的 WP7 应用程序仍然可以正常运行。如果您的应用无法受益于 WP8 功能集,您可以将整个应用保留为 WP7 应用。

关于c# - DataContractSerializer 失败,空数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com