簡體   English   中英

獲取返回的 JSON 字符串 C# 的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM