Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataContractSerializer失败,数据为空_C#_Windows Phone 7_Xml Serialization_Windows Phone 8_Data Serialization - Fatal编程技术网

C# DataContractSerializer失败,数据为空

C# DataContractSerializer失败,数据为空,c#,windows-phone-7,xml-serialization,windows-phone-8,data-serialization,C#,Windows Phone 7,Xml Serialization,Windows Phone 8,Data Serialization,我有一些Windows Phone 7的RSS应用程序代码: private RSSSettings DeserializeSettings(string data) { RSSSettings rsssettings; try { var ser = new DataContractSerializer(typeof(RSSSettings)); using (var sr = new St

我有一些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;
    }
它可以在WindowsPhone7上完美工作。我将该应用程序移植到WindowsPhone8,除此之外,该应用程序中的所有其他功能都正常工作

比较WindowsPhone7和8中的情况,WP8中的“rsssettings”在WP7中正确填充时保持为空。这部分代码根本没有更改

一切都一样,直到:

rsssettings = (RSSSettings)ser.ReadObject(xr);
不调用异常


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

是的,你不会喜欢这样的

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

我希望这是我编造的,但我不是。从MSDN:

DataContractSerializer类

WP8行为:XML元素必须按字母顺序排序

WP7行为:XML元素可以是无序的

在这一点上,您有几种选择:

  • a,a,l,p,h,a,b,e,t,i,c,a,l,l,y,o,r,d,e,r,y,o,u,X,M。不,那真的不是一个选择
  • <> LI>因为您似乎正在获得RSS,您可以考虑使用WCF的Soal.Service MyDel.Cydiix.SydioPoT,它是为RSS/Atom专门构建的。Den Delimarsky在这里提供更多信息
  • 如果使用非RSSXML,请考虑使用直行XML序列化。就我个人而言,这是实现在线XML序列化和反序列化的最好、最简单的方法
  • 通过Quirks模式启用从WP7到WP8的行为更改。这意味着在WP8上运行的WP7应用程序仍然可以正常运行。如果您的应用程序没有从WP8功能集中受益,您可以将整个应用程序保留为WP7应用程序

  • 我首先比较数据对象的内容。它们相同吗?数据对象完全相同。这就是让我如此困惑的原因:(这两种情况下的数据都是XML,这两种情况下的数据似乎一直在传输,直到我突出显示的那一行。Omg。好吧,这将很困难:/谢谢!