.net core 升级到.net core 2.1,现在我可以';不要序列化一个声明

.net core 升级到.net core 2.1,现在我可以';不要序列化一个声明,.net-core,azure-service-fabric,.net Core,Azure Service Fabric,我目前在两个Azure micro服务之间发送声明(System.Security.claims.claims类型)。当我在.NETCore2.0上的时候,它工作得很好。服务结构通信层按预期进行序列化和反序列化。当我升级到.net core 2.1时,我现在收到错误: System.Runtime.Serialization.InvalidDataContractException:“类型”System.Security.Claims.Claims无法序列化。考虑使用DATACONTractAt

我目前在两个Azure micro服务之间发送声明(System.Security.claims.claims类型)。当我在.NETCore2.0上的时候,它工作得很好。服务结构通信层按预期进行序列化和反序列化。当我升级到.net core 2.1时,我现在收到错误:

System.Runtime.Serialization.InvalidDataContractException:“类型”System.Security.Claims.Claims无法序列化。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。或者,您可以确保该类型是公共的,并且具有无参数构造函数-然后将序列化该类型的所有公共成员,并且不需要任何属性。”


我看你已经用单独的索赔类型回答了这个问题。不确定.NET声明类型上发生了什么更改,但它必须具有。没有立即显示出任何东西,可能必须真正分解东西才能看到差异

您还可以通过拥有一个自定义序列化程序来解决这个问题,该序列化程序可以进行控制,并且更为宽松。这对于您自己的类型尤其有效,因为您可以显式地控制流程


这里有更多关于这方面的信息:

我不知道问题出在哪里,但我已经完全放弃使用声明类型,现在我使用我自己的UserClaim类型。无论如何,这样可能更干净。如果其他人感兴趣,这里也有其他序列化问题。我的服务接口混合了IEnumerable和List,serialiser抱怨两种不同的类型具有相同的数据契约名称。要解决这个问题,我必须将所有IEnumerble响应类型和参数更改为List