18

I am trying to read a JSON file and parse it. I have this code for reading from my file

StreamReader re = new StreamReader("artists.json");
JsonTextReader reader = new JsonTextReader(re);

But how do I parse it now from reader so I can search data from the file?

I tried reading the documentation but couldn't find anything

0

3 Answers 3

21
    using Newtonsoft.Json;

    //..

    JsonSerializer se = new JsonSerializer();
    object parsedData = se.Deserialize(reader);
Sign up to request clarification or add additional context in comments.

1 Comment

Some details on how to implement this would be helpful.
10

If you want to load it into a JObject or a dynamic type (and not deserializing it into a .NET type), you can use the JObject.Load method

using(var sr = new StreamReader("artists.json")) 
{
    var reader = new JsonTextReader(sr);
    var jObject = JObject.Load(reader);

    //Get property from JObject
    var someValue = jObject.GetValue("someProperty").Value<string>();

    // JObject can be cast into a dynamic
    var dObject = (dynamic)jObject;
    someValue = (string)dObject.someProperty;

}

Comments

7

in response to "Some details on how to implement this would be helpful. – aknatn"

 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;

 public class Program
  {
         public static void Main()
         {
           //JSON = {"Property1":"as","CollectionProperty":[{"prop1":"1","prop2":"2","prop3":"3"}]}

           //This Top part is just to build a stream 
           //- No need to do this if you are accessing a file 
           string JSON = "{\"Property1\":\"SomePropName\",\"CollectionProperty\":"+
           "[{\"prop1\":\"1\",\"prop2\":\"2\",\"prop3\":\"3\"}]}";
           byte[] byteArray = Encoding.UTF8.GetBytes(JSON);
           //byte[] byteArray = Encoding.ASCII.GetBytes(contents);
           MemoryStream stream = new MemoryStream(byteArray);
           // convert stream to string

           JsonSerializer se = new JsonSerializer();

           StreamReader re = new StreamReader(stream);
           JsonTextReader reader = new JsonTextReader(re);
           var DeserializedObject = se.Deserialize<Collections>(reader);

           Console.WriteLine(DeserializeObject.Property1);

           //"...so I can search data from the file?"
           //This is up to you and how you wanna handle it, but you now have JSON
           //Deserialized and stored in memory. 'How to search' depends on objects class
           //Also, Original question said he had the JSON. I would recommend using 
           //json2csharp.com/ or jsonutils.com/
           //to retrieve the classes in order to Deserialize it to your object. 

           //Note 1: You don't always have to cast it 
           //- I just always try to if and when I can
           //Note 2: Because you are using a StreamReader, 
           //this will account for Large JSON Objects 
         }


    public class Collections
    {
        public List<CollectionProperty> CollectionProperty = new List<CollectionProperty>();
        public string Property1;
    }

    public class CollectionProperty
    {
        public string prop1 { get; set; }
        public string prop2 { get; set; }
        public string prop3 { get; set; }
    }
  }

1 Comment

I'll do this and the stream reader won't have any value to it. If I read it to the end, to a string, the data is there. What am I doing wrong?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.