この質問にはすでに答えがあります:
C#でJson文字列を解析する
(答えは5つ)
3 年前
に閉店しました。
次の形式の json ファイルがあります:
{
"1": {
"additional text": "Info about ..",
"description": "you can find info about ... here",
"link": "https:.."
},
"2": {
"additional text": "Info:",
"description": "Details about ...",
"link": "https://..."
}
}
私が今持っているものは
dynamic d = JObject.Parse(response.Content.ToString());
このコードを使用すると、json 全体を取得できます。 1 の内容とそのネストされた要素を取得する方法がわかりません。
その間、私はこちらも試してみました
String rootObjects = JsonConvert.DeserializeObject<String>(response.Content.ToString());
しかし、やはり各要素の内容を取得できないという同じ問題が発生します。
2
辞書として ... すでに複数回質問されています
– セルビン
2020 年 9 月 3 日 11:03
2
受信した内容がわかっている場合は、dynamic を使用しないでください - あなたの場合は辞書です<int, YourClass>そうすべきです。
– 平和を再び素晴らしいものにしましょう
2020 年 9 月 3 日 11:08
------------------------
public class JsonContent {
[JsonProperty("additional text")]
public string AdditionalText{get;set;}
[JsonProperty("description")]
public string Description{get;set;}
[JsonProperty("link")]
public string Link{get;set;}
}
using System;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
string json = "{\"1\": {\"additional text\": \"Info about ..\", \"description\": \"you can find info about ... here\", \"link\": \"https:..\"}, \"2\": {\"additional text\": \"Info:\", \"description\": \"Details about ...\", \"link\": \"https://...\"}}";
Dictionary<int, JsonContent> dictionary = JsonConvert.DeserializeObject<Dictionary<int, JsonContent>>(json);
foreach(var item in dictionary) {
var key = item.Key;
var content = item.Value;
Console.WriteLine(String.Format("Key: {0}", key));
Console.WriteLine(String.Format("AdditionalText: {0}", content.AdditionalText));
Console.WriteLine(String.Format("Description: {0}", content.Description));
Console.WriteLine(String.Format("Link: {0}", content.Link));
Console.WriteLine(string.Empty);
}
}
}
Newtonsoft.Json NuGet パッケージをインストールする必要があります。
2
辞書<int, JsonContent> Dictionary である必要があります。そうしないと、JSON 文字列が解析されません。 .NET Core の JsonSerializer でテストしました。
– ンドガク
2020 年 9 月 3 日 11:42
int を使用してもまったく問題ありません。見てください - dotnetfiddle.net/MmCidf
– カウサール・ハミッド
2020 年 9 月 3 日 11:45