【问题标题】:Cannot Deserialize ClaimsPrincipal无法反序列化 ClaimsPrincipal
【发布时间】:2018-07-03 15:34:51
【问题描述】:

假设我创建了一个声明身份,然后创建了一个委托人。 然后我序列化主体。检查 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

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

【问题讨论】:

    标签: serialization json.net iprincipal iidentity


    【解决方案1】:

    面对同样的问题,我猜 claimPrinciple 是一个“受保护”的对象,不能那么容易地“复制”。查看 Swagger 生成的代码,一种解决方案可能是创建新类。在 swagger-gen 的 sn-p 之后:

    [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);
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2021-11-08
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多