繁体   English   中英

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

[英]How do I deserialize only a property value from a JSON string?

我正在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM