

<http://cathval.com/csharp/4159>  
こちらのサイトを参考にJSONデータを扱う方法がわかったのですが、下記のURLのようなWebAPIからのJSONの情報ををStringで受け取るにはどのようにしたらよいのでしょうか？

<http://weather.livedoor.com/forecast/webservice/json/v1?city=400040>


CC BY-SA 3.0
2015-04-20T13:58:24.183
9353
2015-04-21T11:28:12.913
2015-04-21T02:27:55.880
8870
8823
question
c# json http
C#でURLからJSONファイルを取得しパースする


`HttpWebRequest`系のクラスを使うこともできますが、  
[WebClient クラス](https://msdn.microsoft.com/ja-
jp/library/system.net.webclient%28v=vs.110%29.aspx) の[WebClient.DownloadString
メソッド](https://msdn.microsoft.com/ja-
jp/library/system.net.webclient.downloadstring\(v=vs.110\).aspx) を使うのが簡単です。

以下使用例。

[code]

    using System;
    using System.IO;
    using System.Net;
    
    namespace HTTPGET
    {
        class HttpGet
        {
            static void Main(string[] args)
            {
                using(WebClient webClient = new WebClient())
                {
                    string str = webClient.DownloadString("http://weather.livedoor.com/forecast/webservice/json/v1?city=400040");
                    Console.Write(str);
                }
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-04-20T15:45:23.817
9356
2015-04-21T00:06:06.980
2015-04-21T00:06:06.980
440
5044
9353
answer


RESTful serviceを作りたかったら、[ASP.NET Web API](http://www.asp.net/web-
api)はこんな目指を考慮して設計されていました。

例えば、[HttpClient](https://msdn.microsoft.com/ja-
jp/library/system.net.http.httpclient\(v=vs.118\).aspx)というクラスを使うと簡単にasyncで受け取れます。

[code]

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;　// nugetで`System.Net.Http`か`Microsoft.AspNet.WebApi.Client`をインストすると使える。
    
    
    namespace httpclient_test
    {
        class Program
        {
            static void Main(string[] args)
            {
                string uri = "http://weather.livedoor.com/forecast/webservice/json/v1?city=400040";
                GetString(uri).Wait();
            }
    
            public static async Task GetString(string uri)
            {
                using (var httpClient = new HttpClient())
                {
                    string response = await httpClient.GetStringAsync(uri);
                    Console.Write(response);
                }
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-04-21T04:25:43.570
9366
2015-04-21T04:25:43.570
9406
9353
answer


.NETでHTTPリクエストを送信する場合の基本は`WebRequest`です。`WebClient`や`HttpClient`も内部的には`WebRequest`を使用しています。

[code]

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    static class Program
    {
        static void Main(string[] args)
        {
            var req = WebRequest.Create("http://weather.livedoor.com/forecast/webservice/json/v1?city=400040");
    
            using (var res = req.GetResponse())
            using (var sr = new StreamReader(res.GetResponseStream(), Encoding.ASCII))
            {
                Console.WriteLine(sr.ReadToEnd());
            }
    
            Console.ReadKey();
        }
    }
    
[/code]

また解析結果だけが欲しいのであれば`String`ではなくて`Stream`をパラメーターにすべきかと思います。

[code]

    dynamic json; 
    using (var res = req.GetResponse())
    using (var s = res.GetResponseStream())
    {
        json = DynamicJson.Parse(s);
    }
    
[/code]


CC BY-SA 3.0
2015-04-21T11:28:12.913
9386
2015-04-21T11:28:12.913
5750
9353
answer