Jack G.
Jack G.

Reputation: 21

Use a stream directly to a parsing instead of saving a file

I mean, this is piece of my code:

// Create the web request (posts/1)
HttpWebRequest request = WebRequest.Create("https://jsonplaceholder.typicode.com/posts/1") as HttpWebRequest;
// Get response  
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
   // Get the response stream  
   StreamReader reader = new StreamReader(response.GetResponseStream());

   {
       string myString = reader.ReadToEnd();
       System.IO.File.WriteAllText(@"C:\Users\admin\Documents\Visual Studio 2015\Projects\WriteText.json", myString);
   }


   // JSON deserialize from a file
   String JSONstring = File.ReadAllText(@"C:\Users\admin\Documents\Visual Studio 2015\Projects\WriteText.json");
   //  List<PARSE> pList = JsonConvert.DeserializeObject<List<PARSE>>(JSONstring);
   PARSE pList = JsonConvert.DeserializeObject<PARSE>(JSONstring);

How can I do this thing without saving the stream and again loading it to a string. I want use my stream directly to a String 'JSONstring' and then parse it.

Upvotes: 0

Views: 426

Answers (2)

JPatel
JPatel

Reputation: 103

Your code contains solution

// Create the web request (posts/1)
HttpWebRequest request = WebRequest.Create("https://jsonplaceholder.typicode.com/posts/1") as HttpWebRequest;
// Get response  
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
   // Get the response stream  
   StreamReader reader = new StreamReader(response.GetResponseStream());

   {
       //string myString = reader.ReadToEnd();
       //System.IO.File.WriteAllText(@"C:\Users\admin\Documents\Visual Studio 2015\Projects\WriteText.json", myString);
   }


   // JSON deserialize from a file
   // String JSONstring = File.ReadAllText(@"C:\Users\admin\Documents\Visual Studio 2015\Projects\WriteText.json");
   //  List<PARSE> pList = JsonConvert.DeserializeObject<List<PARSE>>(JSONstring);
   PARSE pList = JsonConvert.DeserializeObject<PARSE>(reader.ReadToEnd());

   reader.close();

Upvotes: 1

Shannon Holsinger
Shannon Holsinger

Reputation: 2351

Here's an example of how to parse an HTTP stream into a Json (with no error handling). Play with it and let us know if you run into anything specific. In this code. API_Json is the class with the deserialized classes, and I am deserializing API_Json.RootObject:

   public async Task<API_Json.RootObject> walMart_Lookup(string url)
    {
        lookupIsWorking = true;
        HttpClientHandler handler = new HttpClientHandler()
        {
            AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
        };
        using (HttpClient http = new HttpClient(handler))
        {

            http.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
            http.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
            url = String.Format(url);
            using (var response = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
            {
                Console.WriteLine(response);
                var serializer = new JsonSerializer();

                using (StreamReader sr = new StreamReader(await response.Content.ReadAsStreamAsync()))
                {
                    using (var jsonTextReader = new JsonTextReader(sr))
                    {
                        var root = serializer.Deserialize<API_Json.RootObject>(jsonTextReader);
                       lookupIsWorking = false;
                        return root;

                    }
                }

                //var obj = (API_Json_Special_Feeds.RootObject)serializer.Deserialize(sr, typeof(API_Json_Special_Feeds.RootObject));
                //return obj;
            }

        }


    }

Upvotes: 1

Related Questions