【问题标题】:JsonReaderException: Unexpected character encountered while parsing in C#JsonReaderException:在 C# 中解析时遇到意外字符
【发布时间】:2021-01-08 14:02:51
【问题描述】:

所以我正在尝试解码我​​的 jwt 令牌。我最近刚刚向它添加了一个名为“userGroupList”的新对象。这基本上是一个使用JsonConvert.SerializeObject 转换为字符串的类。问题是,当我现在尝试解码我​​的 jwt 令牌时,我收到了这个错误:

Newtonsoft.Json.JsonReaderException: '解析值时遇到意外字符: [.路径“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 = P>

翻译为:

{
    "userId": "2",
    "userName": "John Smith",
    "rank": "Manager",
    "userGroupList": [
        {
            "Id": 1,
            "Name": "Contacts"
        },
        {
            "Id": 2,
            "Name": "Funds"
        },
        {
            "Id": 3,
            "Name": "Compliance"
        }
    ]
}

我对 C# 还是很陌生。我做错了什么?

【问题讨论】:

  • JwtModelUserGroupList 的类型更改为List&lt;UserGroup&gt;(或任何类型的名称),这应该可以解决问题。
  • json like [...] 不是字符串......它是一个数组......我很确定它需要不到 20 秒:在线查找 json 到 C# 代码工具并使用它生成模型类
  • 嘿Croxy。我将类型更改为 IEnumerable UserGroupList 并删除了 JsonConvert.SerializeObject。在此之后,它似乎正在工作。谢谢!

标签: c# json jwt token


【解决方案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 也看起来像字符串而不是 int

public int UserId { get; set; }

public string UserId { get; set; }

【讨论】:

  • 我这样做了,还删除了 JsonConvert.SerializeObject ,它似乎正在工作。感谢您的帮助!
猜你喜欢
  • 2020-05-09
  • 2015-11-28
  • 2017-05-21
  • 1970-01-01
  • 2014-06-09
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多