Десериализовать GenericXmlSecurityToken из JsonResult

#c# #asp.net-web-api #asp.net-core #json.net #asp.net-core-mvc

#c# #asp.net-веб-api #asp.net-core #json.net #asp.net-core-mvc

Вопрос:

При попытке десериализовать GenericXmlSecurityToken из HttpResponseMessage я получаю следующее исключение:

«Не удалось создать экземпляр типа System.IdentityModel.Токены.SecurityKeyIdentifierClause. Тип является интерфейсом или абстрактным классом и не может быть создан. Путь ‘internalTokenReference.assertionId’, строка 1, позиция 162.»

На сервере сериализованный объект создается с помощью

 new JsonResult(genericToken)
  

где genericToken это GenericXmlSecurityToken . На стороне клиента я использую

 HttpResponseMessage response = await httpClient.PostAsync("https://localhost:44359/api/TokenService/RequestToken", requestcontent);
String responseString = await response.Content.ReadAsStringAsync();
GenericXMLSecurityToken result = JsonConvert.DeserializeObject<GenericXMLSecurityToken>(responseString);
  

однако последняя строка выдает исключение с текстом выше. Я понимаю ошибку настолько, насколько я знаю, что не могу создать экземпляр этого типа, потому что он абстрактный, есть ли другой способ сериализовать этот тип, чтобы обойти это, или он просто не сериализуем в JSON?

Ответ №1:

К сожалению, я так и не решил эту проблему, я просто обошел ее, вернув вместо этого представление XML в виде строки ( GenericXmlSecurityToken.TokenXml.OuterXml ).