UWP XmlSerializer PlatformNotSupportedException

时间:2017-10-07 12:20:28

标签: c# xml uwp windows-10-universal

我在UWP项目中使用XmlSerializer。它在编译为调试时工作正常但在发布时抛出PlatformNotSupportedException。

我写了一个简单的C#程序示例来说明这一点。我没有根据VS 2017给我的任何项目设置进行编辑。我在项目中有一个简单的SampleData.xml文件作为内容。我有一个名为SampleItemsForSerialization的类以及SampleItemList和SampleItem,所有这些都标记为能够序列化xml文件。

在另一个课程中,我有以下代码:

try
{
    using (Stream strmRead = await GetAFileStreamForRead(_strFILENAME))
    {
        Type typeSampleItems = typeof(SampleItemsForSerialization);
        XmlSerializer xmlSerializer = new XmlSerializer(typeSampleItems, new XmlRootAttribute("MyRoot"));

        _sampleitems = (SampleItemsForSerialization)xmlSerializer.Deserialize(strmRead);

        bLoadedOK = true;
}
catch (Exception ex)
{ ... }

编译调试时,应用程序运行正常,xml文件被反序列化,然后我可以在消息对话框中显示文件的内容。

编译发布时,XmlSerializer构造函数抛出PlatformNotSupportedException。搜索这个问题已经产生了各种各样的谈话和假设的解决方案,这些解决方案经常相互冲突。我最喜欢的是构建属性GenerateSerializationAssemblies。有人说它应该是On,其他人说Off,或者也许Auto,我不知道?

任何人都能让这一件事变得简单吗?

ETA - 任何想要对此进行破解的人都应该能够在自己的系统上重新创建问题:

  • 在VS 2017中开始一个新的“空白应用程序(通用Windows)”项目。
  • 使用一些简单数据创建XML文件。
  • 创建类以支持适当标记为xmlSerializer支持的xml文件。
  • 在为您创建的MainPage.xaml中添加一个按钮,然后为该按钮添加一个单击处理程序。
  • 在单击处理程序中使用类似于我上面发布的代码,将xml加载到表示xml文件的根元素的类型的对象中。使用MessageDialog或其他东西来显示数据。
  • 编译调试并纠正任何拼写错误等。获取它直到应用程序在调试中运行正常,没有错误,显示预期的数据。
  • 现在更改为在发布模式下编译。再次运行应用程序,你应该得到例外。
  • 0 个答案:

    没有答案