JsonReaderException: неожиданный символ, встречающийся при синтаксическом анализе в C#

#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 . После этого он, похоже, работает. Спасибо!

4. app.quicktype.io?share=CLyWwqUUuDuZarVkkr3o

Ответ №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, и, похоже, он работает. Спасибо за вашу помощь!