Я хотел бы десериализовать объект System.Security.Claims.Claim
, сериализованный следующим образом:
{
"Issuer" : "LOCAL AUTHORITY",
"OriginalIssuer" : "LOCAL AUTHORITY",
"Type" : "http://my.org/ws/2015/01/identity/claims/mytype",
"Value" : "myvalue",
"ValueType" : "http://www.w3.org/2001/XMLSchema#string"
}
То, что я получаю, это JsonSerializationException
:
Невозможно найти конструктор для типа System.Security.Claims.Claim. Класс должен либо иметь значение по умолчанию конструктор, один конструктор с аргументами или конструктор, отмеченный с атрибутом JsonConstructor.
После некоторого исследования я наконец понял смысл одного в приведенном выше сообщении: десериализатор JSON не может найти правильный конструктор, как есть - в случае типа Claim
- несколько конструкторов с аргументами (хотя существует конструктор с аргументами, соответствующими точно указанным выше свойствам).
Можно ли указать десериализатору, какой конструктор выбрать, не добавляя атрибут JsonConstructor
к типу mscorlib?
Даниэль Халан решил эту проблему с патчем для Json.NET несколько лет назад. Есть ли способ решить эту проблему без изменения Json.NET в наши дни?