UWP中CollectionDataContract的DataContractSerialzer错误

时间:2016-03-16 23:19:13

标签: c# datacontractserializer windows-10-universal .net-native

我将现有库移植到Windows 10通用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>

有没有办法解决运行时指令?

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

EDIT2: 可行的解决方法是删除属性的使用。我们确实想要定制的合同名称,所以这不是理想的。

1 个答案:

答案 0 :(得分:3)

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