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

C# 如何仅从JSON字符串反序列化属性值?,c#,json,C#,Json,我正在一个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/js

我正在一个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);
我想做一些类似的事情:

{ "token":"eyJhbGciOiJIUz...AXRbztetz_WhI"}
var token = JsonConvert.DeserializeObject<???>(json);
var-token=JsonConvert.DeserializeObject(json);
但是当我使用

JsonConvert.DeserializeObject<string>(json)
JsonConvert.DeserializeObject(json)
我得到一个
JsonReaderException

分析值时遇到意外字符:{.Path“”,第行 1,位置1


现在,如何反序列化该json以获取
令牌
属性的字符串值?

您可以执行以下操作:

var parsedJson = JObject.Parse(json);
var token = (string)parsedJson["token"];

classtokenjsonresult{
公共字符串标记{get;set;}
}
var parsedJson=JsonConvert.DeserializeObject(json);
var token=parsedJson.token;

您可以执行以下操作:

var parsedJson = JObject.Parse(json);
var token = (string)parsedJson["token"];

classtokenjsonresult{
公共字符串标记{get;set;}
}
var parsedJson=JsonConvert.DeserializeObject(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

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

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

var-token=(string)JObject.Parse(json)[“token”]
var-token=(string)JObject.Parse(json)[“token”]
谢谢。您的第一个选项简单得多,效果很好。对我来说,它可以处理少量的JSON。但是,对于具有许多属性和对象层次结构的复杂查询结果,第二个选项做得更好。谢谢。您的第一个选项简单得多,效果很好。对我来说,它可以处理少量的JSON。但是,对于许多属性和对象层次结构,第二个做得更好。