【问题标题】:.NET Native serialization code missing for List<T>List<T> 缺少 .NET 本机序列化代码
【发布时间】:2016-02-23 20:59:50
【问题描述】:

在 Windows 10 通用应用程序中,我在尝试使用 DataContractSerializer 时遇到错误

类型 'System.Collections.Generic.List`1[System.SByte]' 不能 serialized,该类型的序列化代码丢失。请查阅 SDK 将其添加为根序列化类型的文档。

我没有直接使用 DCS,而是在 WCF 调用服务操作的上下文中使用。

我无法弄清楚什么运行时指令可以解决这个问题。以下没有帮助:

<Type Name="System.Collections.Generic.List{System.SByte}" 
      Dynamic="Required Public" 
      DataContractSerializer="Required Public" 
      Browse="Required All" 
      Serialize="Required All"/>

【问题讨论】:

  • 这个库是可移植类库吗?我们在更新 1 中有一个错误,因此某些 PCL 永远不会为它们生成任何序列化数据。
  • 不,它不是 PCL。我已经根据下面 KooKiz 的答案修改了指令,现在在编译时收到 InvalidOperationException 消息“找到 f_AnonymousType0`2 的多个匹配项”。应用程序或引用的库在哪里定义这种匿名类型是一个谜。调试这些问题的推荐资源是什么?
  • 如果我们能够直接通过电子邮件解决这个问题,这可能是最快的。你可以在这里找到我们:dotnetnative@microsoft.com。
  • 在跟踪客户端和服务之间的消息时,看起来我在尝试反序列化使用 FlagsAttribute 修饰的枚举类型时可能会收到此错误。有没有可能这些被视为 List

标签: c# generics win-universal-app datacontractserializer .net-native


【解决方案1】:

根据文档 (https://msdn.microsoft.com/en-us/library/dn627478(v=vs.110).aspx),您对 List&lt;SByte&gt; 的声明不正确。您只需指明泛型参数的数量,而不是它们的实际类型:

<Type Name="System.Collections.Generic.List`1" ... />

【讨论】:

  • 谢谢。由于找到了多个匹配项,我已经进行了此更改,现在在编译时获得了 InvalidArgumentException。前进一步,后退一步。
【解决方案2】:

也许这会有所帮助:

<Namespace Name="System" Serialize="Required Public" DataContractSerializer="Required All"/>

<Namespace Name="'System.Collections.Generic" DataContractSerializer="Required All">
  <TypeInstantiation Name="List"
        Arguments="System.SByte" Serialize="Public" DataContractSerializer="Required All"/>
</Namespace>

在类似的情况下,它帮助了我。 我使用了这些链接:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 2011-09-09
  • 2012-08-23
  • 2012-04-20
  • 2021-03-12
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多