ASP.NET Core中的System.Text.Json JsonValueKind

4

我面临一个关于JsonValueKind的问题,即我无法访问它们的值。我正在使用Hyperpay进行付款结账。

我使用以下方法向其API发送请求,并根据以下方式对响应进行反序列化:

enter image description here

在主页控制器对应的操作方法中,我调用request()方法获取结果。以下是结果的样子:

enter image description here

例如,我卡在获取代码和说明的值上,因为它们存储在JsonValueKind中。您能否帮助我处理JsonValueKind以提取这些值。

非常感谢您的帮助。


嗨@Ali,我的回答有帮到你吗? - Rena
1个回答

7

如果您想要获取结果中的对象值,请看下面的演示示例:

public void Test()
{
    //the data here is the same as reader.ReadToEnd() in your project
    var data = GetRequest();

    //your result
    var responseData = JsonSerializer.Deserialize<Dictionary<string, dynamic>>(data);
    
    //change like below
    var d = JsonDocument.Parse(data);  //JsonDocument.Parse(reader.ReadToEnd())
    var result = d.RootElement.EnumerateObject();
    foreach (var r in result)
    {
        if (r.Value.ValueKind == JsonValueKind.String)
        {
            var stringValue = r.Value.GetString();
        }
        if (r.Value.ValueKind == JsonValueKind.Object)
        {
            var m = JsonSerializer.Deserialize<TestModel>(r.Value.GetRawText());
            var Code = m.code;
            var des = m.description;
        }
    }
       
}

模型:

public class TestModel
{
    public string code { get; set; }
    public string description { get; set; }
}

结果: 在此处输入图片描述

简单方法是创建一个像下面这样的ViewModel来表示结果:

public class ViewModel
{
    public TestModel result { get; set; }
    public string buildNumber { get; set; }
}

反序列化JSON字符串并获取如下所示的值:

var responseData = JsonSerializer.Deserialize<ViewModel>(reader.ReadToEnd());
var code = responseData.result.code;
var des = responseData.result.description;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接