我将现有库移植到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: 可行的解决方法是删除属性的使用。我们确实想要定制的合同名称,所以这不是理想的。
答案 0 :(得分:3)
此问题已在最新版本中修复。要获得此修复程序,请从UWP项目中添加对System.Runtime.Serialization.Xml(4.0.11)程序包的显式引用。然后重建项目,它应该工作。