3

I have found some helper method that allow me to convert an object to JSONM and JSON to an object. Now I am reading in a json file that looks something like this:

/************************************************************************/
/* Coments Here *********************************************************/
/************************************************************************/
//more comments  
[{
  "Id": 1,
  "Name": "HP Up"
},
{
  "Id": 2,
  "Name": "Regeneration"
}]

Now while I can convert JSON the represents 1 object, I would I go about converting this in multiple objects with C# .NET 3.5?

3 Answers 3

10

You need to use DataContractJsonSerializer which is in the System.Runtime.Serialization.Json namespace. Mark your class with the [DataContract] attribute, collection classes with the [CollectionDataContract] attribute and the properties with the [DataMember] attribute.

[CollectionDataContract]
public class People : List<Person>
{

}

[DataContract]
public class Person
{
     public Person() { }

     [DataMember]
     public int Id{ get; set; }

     [DataMember]
     public string Name { get; set; }
}

Here is a helper class to serialize (To) and deserialize (From)

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

public class jsonHelper
{
    public static string To<T>(T obj)
    {
        string retVal = null;
        System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
        using (MemoryStream ms = new MemoryStream())
        {
         serializer.WriteObject(ms, obj);
         retVal = Encoding.Default.GetString(ms.ToArray());
        }

        return retVal;
    }

    public static T From<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();
        using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
        {
         System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
         obj = (T)serializer.ReadObject(ms);
        }

        return obj;
    }
}

So take your json above and send it to the From method in the jsonHelper class above

People peeps = jsonHelper.From<People>(input);
Sign up to request clarification or add additional context in comments.

2 Comments

That is what I already have but that won't work for multiple objects in the JSON like the example one given. I want to be able to read in a JSON object with multiple objects and put them into a list I just don't know how to break up the JSON string from the file into multiple objects.
The example here will deserialize the JSON into a list of objects of type Person. Then you can iterate the collection and inspect each object individually.
5

Download Json.NET. That handles JSON better than anything else I've seen for .NET. I think the Json serializer will do what you're asking.

Also, take a look at the related questions over there on the right. I do believe you'll find the answer there.

Comments

0

I have changed the above 'From' Method to this one, in order to get an array of objects:

public static T Deserialize<T>(string json)
    {
        T obj;
        using (MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(json)))
        {
            System.Runtime.Serialization.Json.DataContractJsonSerializer deserializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
            obj = (T)desirializer.ReadObject(ms);
        }

        return obj;
    }

Then, in case you have an array of objects :

Person[] personArray = JsonHelper.Deserialize<Person[]>(input);

or if you have one object :

Person person = JsonHelper.Deserialize<Person>(input);

Comments

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.