serialization - 无法反序列化 ClaimPrincipal

标签 serialization json.net iprincipal iidentity

假设我创建了一个声明身份,随后创建了一个委托(delegate)人。 然后我将校长序列化。检查 json 字符串,我可以确认“角色”声明以及身份都存在。

将其反序列化会产生一个具有空属性的对象。 .Claims.Identity 丢失。

var identity = new ClaimsIdentity(new List<Claim>() { new Claim("Role", "Admin") });
var principal = new ClaimsPrincipal(identity);

string serialized = JsonConvert.SerializeObject(principal, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
ClaimsPrincipal deserialized = JsonConvert.DeserializeObject<ClaimsPrincipal>(serialized); // The object has all properties empty

问题:如何确保对象正确反序列化?

最佳答案

面对同样的问题,我猜想 ClaimsPrinciple 是一个“ protected ”的对象,不能那么容易“复制”。查看 Swagger 生成的代码,一种解决方案可能是创建新类。以下是 swagger-gen 的片段:

[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.15.0 (Newtonsoft.Json v11.0.0.0)")]
    public partial class ClaimsPrincipal 
    {
        [Newtonsoft.Json.JsonProperty("Claims", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
        public System.Collections.Generic.ICollection<Claim> Claims { get; set; }

        [Newtonsoft.Json.JsonProperty("Identities", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
        public System.Collections.Generic.ICollection<ClaimsIdentity> Identities { get; set; }

        [Newtonsoft.Json.JsonProperty("Identity", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
        public IIdentity Identity { get; set; }

        public string ToJson() 
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this);
        }

        public static ClaimsPrincipal FromJson(string data)
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject<ClaimsPrincipal>(data);
        }

    }

关于serialization - 无法反序列化 ClaimPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425036/

相关文章:

c# - 如何将下面的JSON数组转换成IDictionary<string, object>?

c# - 使用 Json.Net 反序列化在某些字段上失败

c# - Base Controller ASP.NET MVC 3 中的这个 Custom Principal 是不是非常低效?

c# - 为什么 Resharper 认为 IPrincipal.Identity 永远不会为空?

c# - IPrincipal.IsInRole() 仅在我截断角色名称时有效 - 为什么?

java - CORBA 中是否有与 writeReplace 等效的东西?

haskell - 定义自定义 "Ambigous type variable"函数时出现 "read"错误

c# - C# 中的自定义 javascript 反序列化器

java - 我们何时以及为什么应该在 java 中进行自定义序列化?

.net - Ubuntu 上 Newtonsoft.Json.Utilities.ConvertUtils 的类型初始值设定项抛出异常