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