[英]Grabbing the value of a returned JSON string C#
我有 JSON 回復,我需要從中獲取“Id”。 我嘗試了以下代碼的 2 個變體
using (JsonDocument document = JsonDocument.Parse(jsonstring))
{
JsonElement root = document.RootElement;
JsonElement resultsElement = root.GetProperty("Result");
List<string> names = new List<string>();
foreach (var result in resultsElement.EnumerateObject())
{
if (result.Value.TryGetProperty("Id", out resultsElement))
{
names.Add(resultsElement.GetString());
}
}
}
請求的操作需要類型為“Object”的元素,但目標元素的類型為“Number”。
將 EnumerateObject 調整為 Enumerate Array 但我仍然遇到相同的錯誤,使用 'Array' - 'Object' 而不是 'Object' - 'Array'
JSON 回復具有以下格式:
{
"code":1,
"result":{
"Id":1,
"Name":"name"
}
}
我似乎無法使用 bove 方法獲取特定的 Id。
我認為你在為自己做這件事; 映射到類型要容易得多:
public class MyRoot {
[JsonProperty("code")]
public int Code {get;set;}
[JsonProperty("result")]
public MyResult Result {get;set;}
}
public class MyResult {
public int Id {get;set;}
public string Name {get;set;}
}
並使用:
var root = JsonConvert.DeserializeObject<MyRoot>(json);
var result = root.Result;
// etc
您可以枚舉已解析的JsonDocument
Root
元素和result
元素。 或者對每個具有JsonValueKind.Object
類型的子節點遞歸執行並獲取id
值
using (var document = JsonDocument.Parse(File.ReadAllText("test.json")))
{
JsonElement root = document.RootElement;
var names = new List<string>();
Enumerate(root);
void Enumerate(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Object)
{
foreach (var item in element.EnumerateObject())
{
if (item.Value.ValueKind == JsonValueKind.Object)
{
Enumerate(item.Value);
}
if (item.Value.ValueKind == JsonValueKind.Number && item.Name == "Id")
{
//Console.WriteLine(item.Value.GetRawText());
names.Add(item.Value.GetRawText());
}
}
}
}
}
此代碼允許您枚舉具有任意數量嵌套級別的 JSON
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.