JsonReaderException:在 C# 中解析时遇到意外字符
JsonReaderException: Unexpected character encountered while parsing in C#
所以我正在尝试解码我的 jwt 令牌。我最近刚刚向它添加了一个名为“userGroupList”的新对象。这基本上是一个用 JsonConvert.SerializeObject
转换为字符串的 class。问题是,当我现在尝试解码我的 jwt 令牌时,出现此错误:
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: [. Path 'userGroupList', line 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# 还是很陌生。我做错了什么?
改变
public string UserGroupList { get; set; }
至
public IList<UserGroup> UserGroupList { get; set; }
然后为 UserGroup
创建 class
class UserGroup {
public int Id {get; set;}
public string Name {get; set;}
}
也 UserId
看起来像字符串而不是整数
public int UserId { get; set; }
至
public string UserId { get; set; }
所以我正在尝试解码我的 jwt 令牌。我最近刚刚向它添加了一个名为“userGroupList”的新对象。这基本上是一个用 JsonConvert.SerializeObject
转换为字符串的 class。问题是,当我现在尝试解码我的 jwt 令牌时,出现此错误:
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: [. Path 'userGroupList', line 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# 还是很陌生。我做错了什么?
改变
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
看起来像字符串而不是整数
public int UserId { get; set; }
至
public string UserId { get; set; }