UWP 中 CollectionDataContract 的 DataContractSerialzer 错误

DataContractSerialzer errors with CollectionDataContract in UWP

我正在将现有库移植到 Windows 10 Universal Windows 平台,但在序列化标有 CollectionDataContract 属性的类型时遇到问题。这些 类 使用 CollectionDataContract 的 KeyName 和 ValueName 属性在序列化期间提供自定义名称。在调试模式下一切正常,但在启用 .NET Native Tool Chain 时失败。

例如:

[CollectionDataContract(Name = "OriginalValuesMap",
     ItemName = "OriginalValues", KeyName = "Name", ValueName = "OriginalValue")]
internal class OriginalValuesMap : Dictionary<string, Object> { ... }

正确序列化后看起来像这样:

<OriginalValuesMap>
  <OriginalValues>
     <Name>Company</Name>
     <OriginalValue i:type="d:string">Facebook</OriginalValue>
  </OriginalValues>
</OriginalValuesMap>

然而在失败的情况下看起来是这样的:

<OriginalValuesMap>   
   <OriginalValues>
     <b:Key>Company</b:Key>
     <b:Value i:type="d:string">Facebook</b:Value>   
   </OriginalValues> 
</OriginalValuesMap>

有没有办法通过运行时指令解决这个问题?

编辑1: 我认为使用香草 CollectionDataContract 的一种解决方法也不起作用。在 .NET Native UWP 端序列化的名称与 .NET WCF 应用期望反序列化的名称不匹配。

编辑2: 一种可行的解决方法是删除对该属性的使用。我们确实需要定制的合同名称,所以这并不理想。

此问题已在最新版本中修复。要获得修复,请从您的 UWP 项目中添加对 System.Runtime.Serialization.Xml (4.0.11) 包的显式引用。然后重建项目,它应该可以工作。