如何解决ASP.NET Core System.Text.Json JsonValueKind
我遇到JsonValueKind问题,因为我无法访问它们的值。我正在与Hyperpay进行付款结帐。
我使用以下方法向其api请求并反序列化响应,如下所示:
在家庭控制器对应的操作方法中,我正在调用request()
方法以获取结果。结果如下:
例如,我坚持获取代码和描述的值,因为它们存储在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; }
}
简单的方法是为如下结果创建一个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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。