簡體   English   中英

在 C# 中使用動態類型並從 JSON 訪問元素數組(動態類型和 DynamicJsonObject)

[英]using dynamic type in C# and accessing elements array from JSON (dynamic type and DynamicJsonObject)

我有一個 json 字符串取自第三方 API。但是這個第三方 API,我們不知道它的確切 JSON 定義並且有很多屬性,我們只知道他們有我們需要的信息

這是一個例子

{
  "exp": 1670979934,
  "iat": 1670979634,
  "auth_time": 1670979634,
  "jti": "86a4610c-9e9a-473f-9cc0-0959aa779702",
  "iss": "http://localhost:8080/auth/realms/ScopicSoftware",
  "aud": "account",
  "sub": "2874bbca-e34b-44f0-8ca7-cfc57708a124",
  "typ": "Bearer",
  "azp": "keycloakdemo",
  "realm_access": {
    "roles": [
      "default-roles-scopicsoftware",
      "offline_access",
      "uma_authorization"
    ]
  },
  "resource_access": {
    "keycloakdemo": {
      "roles": [
        "admin"
      ]
    },
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  }
...
...
}

正如我所說,我們不擁有也沒有 JSON 的確切信息,除了 output,所以我們不能只做 Json。反序列化並將 model object 傳遞給它。 (或者我們可以基於有限的信息嗎?)

我們想訪問“resource_access”->“keycloak_demo”和“roles”數組

我嘗試的是改用 C# 中的動態類型

dynamic dataX = Json.Decode(responseString);

我可以通過

   var demo = dataX.resource_access.keycloakdemo;

它返回一個類型為 DynamicJsonArray 的變量。 但是,我無法使用普通的 for 循環或 Enumerator 迭代它,它崩潰了。

那么,鑒於我們沒有 model 定義,正確的做法是什么?

你可以使用這樣的代碼

var jsonParsed = JObject.Parse(json);

string[] roles = jsonParsed.SelectToken("resource_access.keycloakdemo.roles")
                                                          .ToObject<string[]>();

foreach (string role in roles)
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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