ASP.NET Core System.Text.Json JsonValueKind

问题描述

我遇到JsonValueKind问题,因为我无法访问它们的值。我正在与Hyperpay进行付款结帐。

我使用以下方法向其api请求并反序列化响应,如下所示:

enter image description here

在家庭控制器对应的操作方法中,我正在调用request()方法以获取结果。结果如下:

enter image description here

例如,我坚持获取代码和描述的值,因为它们存储在JsonValueKind中。您能否帮我处理JsonValueKind以提取值。

非常感谢您。

解决方法

ValueKind是一个字符串值。您的字典应为public String getCoEmail() { coUserReference = db.collection("users").document(email); coUserReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document.exists()) { String coEmail = document.getString("coEmail"); Log.d(TAG,"DocumentSnapshot data: " + document.getString("coEmail")); } else { Log.d(TAG,"No such document"); } } else { Log.d(TAG,"get failed with ",task.getException()); } } }); return coEmail; }

Dictionary<string,string>
,

如果要获取结果中的对象值,请参见以下示例:

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

结果: enter image description here

简单的方法是为如下结果创建一个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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...