简体   繁体   English

如何从 System.Text.Json 中的 JsonNode 读取值

[英]How to read values from JsonNode in System.Text.Json

I want to serialize a refresh token and send it to the client.我想序列化一个刷新令牌并将其发送给客户端。

Then on return, I want to deserialize and read it.然后返回时,我想反序列化并阅读它。

Here's my code.这是我的代码。

using System.Text.Json;
using System.Dynamic;
using System;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Text.Json.Nodes;


dynamic token = new ExpandoObject();

token.UserName = "John";
token.Expires = DateTime.Now.AddMinutes(5);
token.CreateDate = DateTime.Now;

var options = new JsonSerializerOptions
                {
                    PropertyNameCaseInsensitive = true,
                    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                    DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
                    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
                };

var refreshToken = JsonSerializer.Serialize(token,  options);

Console.WriteLine(refreshToken);

var deserializedToken = JsonSerializer.Deserialize<JsonNode>(refreshToken, options);

var userName = "How can I extract username from JsonNode";

I tried to use JsonNode["UserName"].Value , but it does not work.我尝试使用JsonNode["UserName"].Value ,但它不起作用。

Since you are using dynamic all subsequent variables are resolved as dynamic too.由于您使用的是dynamic所有后续变量也被解析为dynamic Just declare one of the types (for example string for serialization result) and use indexer + GetValue :只需声明其中一种类型(例如序列化结果的string )并使用 indexer + GetValue

string refreshToken = JsonSerializer.Serialize(token,  options);

JsonNode? deserializedToken = JsonSerializer.Deserialize<JsonNode>(refreshToken, options);
var userName = deserializedToken["userName"].GetValue<string>();

you can just use Parse你可以只使用解析

JsonNode deserializedToken = JsonNode.Parse(refreshToken);
string userName = (string) deserializedToken["userName"];

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

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