如何仅从JSON字符串反序列化属性值?

问题描述 投票:0回答:2

我正在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属性的字符串值?

c# json
2个回答
2
投票

你可以这样做:

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;

1
投票

您可以定义匿名类型以用作模板,并阅读如下属性:

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
© www.soinside.com 2019 - 2024. All rights reserved.