【问题标题】:How to read values from JsonNode in System.Text.Json如何从 System.Text.Json 中的 JsonNode 读取值
【发布时间】:2022-12-24 16:55:55
【问题描述】:

我想序列化一个刷新令牌并将其发送给客户端。

然后在返回时,我想反序列化并阅读它。

这是我的代码。

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";

我尝试使用JsonNode["UserName"].Value,但它不起作用。

【问题讨论】:

  • 在调试模式下,如果您查看 deserializedToken,它看起来像什么?您的动态对象被序列化程序视为字典。

标签: c# json system.text.json


【解决方案1】:

由于您使用的是dynamic,因此所有后续变量都解析为dynamic。只需声明其中一种类型(例如 string 用于序列化结果)并使用 GetValue

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

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

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2019-01-26
    • 1970-01-01
    • 2021-05-28
    • 2021-05-07
    • 2022-08-07
    • 1970-01-01
    • 2021-02-05
    • 2022-01-03
    相关资源
    最近更新 更多