Невозможно десериализовать ClaimsPrincipal

Учитывая, я создаю личность претензий и впоследствии принципал. Затем я сериализирую принципала. Изучив строку 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

Вопрос: Как я могу убедиться, что объект правильно десериализован?

0 ответов

Столкнувшись с той же проблемой, я полагаю, что ClaimPressPrlelele - это защищенный объект, который не может быть легко скопирован. Взглянув на генерируемый 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);
        }

    }
Другие вопросы по тегам