#c# #json #jwt #token
#c# #json #jwt #жетон #токен
Вопрос:
Итак, я пытаюсь расшифровать свой токен jwt. Я только недавно добавил к нему новый объект под названием «userGroupList». По сути, это класс, который преобразуется в строку с JsonConvert.SerializeObject
помощью . Проблема в том, что когда я пытаюсь декодировать свой токен jwt, я получаю эту ошибку:
Newtonsoft.Json.JsonReaderException: «Неожиданный символ, обнаруженный при синтаксическом анализе значения: [. Path ‘userGroupList’, строка 1,
Так создается токен jwt:
JsonConvert.SerializeObject(Logics.GetJwtToken(new JwtModel { UserId = user.UserId, UserName = user.UserName, Rank = user.Rank, UserGroupList = JsonConvert.SerializeObject(user.UserGroups)}));
Это код:
public static JwtModel ValidateJwtTokenWithResult(string token)
{
try
{
string[] parts = token.Split('.');
string payload = parts[0] "." parts[1];
string hash = parts[2];
if (ConfirmToken(payload, hash, "secretthing"))
{
JwtModel basejwt = JsonConvert.DeserializeObject<JwtModel>(Base64UrlEncoder.Decode(parts[1]));
return basejwt;
}
return null;
}
catch
{
return null;
}
}
public class JwtModel
{
public int UserId { get; set; }
public string UserName { get; set; }
public string Rank { get; set; }
public string UserGroupList { get; set; }
}
И это токен, который я пытаюсь десериализовать:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI0IiwidXNlck5hbWUiOiJSYXltb25kIEZ1bmciLCJyYW5rIjoiTWFuYWdlciIsInVzZXJHcm91cExpc3QiOlt7IklkIjoxLCJOYW1lIjoiQ29udGFjdHMifSx7IklkIjoyLCJOYW1lIjoiRnVuZHMifSx7IklkIjozLCJOYW1lIjoiQ29tcGxpYW5jZSJ9XX0.Aq6UQJkBslh10Fxkr8MZjuxgqHZxmpWv295kqpG8wo8=
Что переводится как:
{
"userId": "2",
"userName": "John Smith",
"rank": "Manager",
"userGroupList": [
{
"Id": 1,
"Name": "Contacts"
},
{
"Id": 2,
"Name": "Funds"
},
{
"Id": 3,
"Name": "Compliance"
}
]
}
Я все еще довольно новичок в C #. Что я делаю не так?
Комментарии:
1. Измените тип
UserGroupList
в вашемJwtModel
наList<UserGroup>
(или как бы там ни назывался тип), это должно сработать.2. подобный json
[...]
не является строкой … это массив … Я почти уверен, что требуется менее 20 секунд, чтобы: найти json для C # code tool онлайн и использовать его для создания класса модели3. Привет, Крокси. Я изменил тип на IEnumerable<UserGroup> UserGroupList и удалил объект JsonConvert.SerializeObject . После этого он, похоже, работает. Спасибо!
Ответ №1:
изменить
public string UserGroupList { get; set; }
Для
public IList<UserGroup> UserGroupList { get; set; }
затем создайте класс для UserGroup
class UserGroup {
public int Id {get; set;}
public string Name {get; set;}
}
также UserId
выглядит как string, а не int
public int UserId { get; set; }
Для
public string UserId { get; set; }
Комментарии:
1. Я сделал это, а также удалил JsonConvert.SerializeObject, и, похоже, он работает. Спасибо за вашу помощь!