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) 包的显式引用。然后重建项目,它应该可以工作。
我正在将现有库移植到 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) 包的显式引用。然后重建项目,它应该可以工作。