43887
お世話になります。

Web Ad Fortune
APIで占い結果を取得するものを作ってみようと初めて見たのですが、サンプルなどもあまりなかったので途中で行き詰ってしまいました。

下記にコードを記します。

```

    var url = "http://api.jugemkey.jp/api/horoscope/free/" + DateTime.Now.ToString("yyyy/MM/dd");
    var req = WebRequest.Create(url);
    
    using (var res = req.GetResponse())
    using (var s = res.GetResponseStream())
    {
        dynamic json = DynamicJson.Parse(s);
    　　string st = json.horoscope.????; //　　ここがわかない
    }
    
```

上記までできているのですが、いざ一つ一つの項目を取得する方法がわかりません。  
サイトを見ると、『content』や『rank』や『sign』等があるようなのですが、  
どうすれば良いのでしょうか。

初歩的な質問で申し訳ありませんが、ご教授いただけますよう、お願いいたします。
CC BY-SA 4.0
2018-05-09T06:12:03.633
43886
2018-05-09T11:47:11.597
2018-05-09T11:47:11.597
3060
9374
question
c# json api
C#でDinamicJsonを使用してWeb APIの結果を取得する方法
該当APIで「`content`」等の項目を得るには

```

    json.horoscope["yyyy/MM/dd"][n].content
    
```

のように日付とインデックスの階層を経る必要があるようです。

ただDynamicJsonは内部的に`XElement` (XML)でデータを保持しているため、XML要素名としては無効な
**`yyyy/MM/dd`というインデックスにアクセスすることは出来ません**。

標準のJSONパーサーである`Newtonsoft.Json`では以下のような手順になります。なおこのライブラリでは直接`Stream`を処理できないため`StreamReader`を継ぎ足していますが、`string`を得られる通信方法に変えた方がよいでしょう。

```

    // 日付を2回使うので変数化
    var d = DateTime.Now.ToString("yyyy/MM/dd");
    var url = "http://api.jugemkey.jp/api/horoscope/free/" + d;
    
    var req = WebRequest.Create(url);
    
    using (var res = req.GetResponse())
    using (var s = res.GetResponseStream())
    using (var sr = new StreamReader(s)) // 追加
    {
        dynamic json = JObject.Parse(sr.ReadToEnd()); // DynamicJsonから変更
        Console.WriteLine(json.horoscope[d][0].content);
    }
    
```
CC BY-SA 4.0
2018-05-09T08:12:15.633
43887
2018-05-09T08:12:15.633
5750
43886
answer