我有一个属性类型为 的 DTO 类JObject
。此 DTO 类在多个服务之间通过 HTTP 发送/接收。使用 JObject 是因为ExtractedData
它没有预定义的属性
public class MyDTO
{
public JObject ExtractedData {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在将此项目转换为 .NET 5。什么相当于 .NET 5 中的 JObject?我试图避免 JsonDocument 因为(来自文档):
JsonDocument 将数据的内存视图构建到池化缓冲区中。因此,与 Newtonsoft.Json 中的 JObject 或 JArray 不同,JsonDocument 类型实现 IDisposable 并且需要在 using 块中使用。
我打算使用JsonElement
. 这是最合适的选择还是有任何其他类型可用于将 JSON 作为对象保存?
因为我正在尝试 使用调试器使用JsonSerializer.Deserialize访问对象值。
这是我在下面的结果。
OtpData = ValueKind = Object : "{
"OTP":"3245234",
"UserName":"mohit840",
"type":"SuperAdmin"
}"
Run Code Online (Sandbox Code Playgroud)
当我尝试使用var Data = JsonSerializer.Deserialize(OtpData)
它访问它时,会出现以下错误。
我如何访问内部并获取以下对象的值。
"OTP":"3245234",
"UserName":"mohit840",
"type":"SuperAdmin"
Run Code Online (Sandbox Code Playgroud)
更新 :
[AllowAnonymous]
[HttpPost("ValidateOTP")]
public IActionResult ValidOTP(dynamic OtpData)
{
bool Result = false;
var Data = JsonSerializer.Deserialize(OtpData);
if (OtpData.type == "SuperAdmin")
{
Users _Users = _Context.Users.FirstOrDefault(j => j.Username == "");
if (_Users != null)
{
_Users.OTP = OtpData.OTP;
_Users.VerififedOTP = true;
_Context.SaveChanges();
Result = true;
}
}
else
{
Staff _Staff = …
Run Code Online (Sandbox Code Playgroud) 有人可以帮我解决这个错误吗?直到现在我还无法解决这个问题。我不知道问题出在哪里。
“无法访问已处置的对象。对象名称:'JsonDocument'”
我刚刚开始使用“Sytem.Text.Json”,这就是为什么我仍在学习并想知道如何正确使用它。
谢谢。
public static async Task<JsonElement> ParseJsonData(string api, CancellationToken ct)
{
clientHandler = new HttpClientHandler()
{
UseProxy = Proxy.IsUseProxy ? true : false,
Proxy = Proxy.IsUseProxy ? new WebProxy($"{Proxy.ProxyHost}:{Proxy.ProxyPort}") : null,
//ServerCertificateCustomValidationCallback = (sender, certificate, chain, errors) => { return true; },
// SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls
};
var uri = new Uri(api, UriKind.Absolute);
utils.SetConnection(uri);
client = new HttpClient(clientHandler);
using (var request = new HttpRequestMessage(HttpMethod.Get, uri))
{
AddRequestHeaders(request, uri);
return await ResponseMessage(request, ct);
}
} …
Run Code Online (Sandbox Code Playgroud)