我正在Web API项目中试验JWT auth,这是获取令牌的代码:
public static async Task Main(string[] args)
{
var login = new {username = "mario", password = "secret"};
var content = new StringContent(JsonConvert.SerializeObject(login), Encoding.UTF8, "application/json");
var resp = await _client.PostAsync("api/Token", content);
var json = await resp.Content.ReadAsStringAsync();
}
然而,json
的最终价值看起来像:
{ "token":"eyJhbGciOiJIUz...AXRbztetz_WhI"}
我想做的事情如下:
var token = JsonConvert.DeserializeObject<???>(json);
但是当我用的时候
JsonConvert.DeserializeObject<string>(json)
我得到一个JsonReaderException
:
解析值时遇到意外的字符:{。路径'',第1行,第1位。
现在我如何反序列化该json以获取token
属性的字符串值?
你可以这样做:
var parsedJson = JObject.Parse(json);
var token = (string)parsedJson["token"];
要么
class TokenJsonResult{
public string token {get;set;}
}
var parsedJson = JsonConvert.DeserializeObject<TokenJsonResult>(json);
var token = parsedJson.token;
您可以定义匿名类型以用作模板,并阅读如下属性:
using Newtonsoft.Json;
var input = @"{'token':'eyJhbGciOiJIUzAXRbztetz_WhI'}";
var template = new { token = string.Empty };
var result = JsonConvert.DeserializeAnonymousType(input, template);
Console.WriteLine(result.token);
输出:
eyJhbGciOiJIUzAXRbztetz_WhI