tags:

views:

741

answers:

2

Hi, am new to Json so a little green.

I have a Rest Based Service that returns a json string;

{"treeNode":[{"id":"U-2905","pid":"R","userId":"2905"},
{"id":"U-2905","pid":"R","userId":"2905"}]}

I have been playing with the Json.net and trying to Deserialize the string into Objects etc. I wrote an extention method to help.

public static T DeserializeFromJSON<T>(this Stream jsonStream, Type objectType)
        {
            T result;

            using (StreamReader reader = new StreamReader(jsonStream))
            {
                JsonSerializer serializer = new JsonSerializer();
                try
                {
                    result = (T)serializer.Deserialize(reader, objectType);
                }
                catch (Exception e)
                {   
                    throw;
                }

            }
            return result;
        }

I was expecting an array of treeNode[] objects. But its seems that I can only deserialize correctly if treeNode[] property of another object.

public class treeNode
{
    public string id { get; set; }
    public string pid { get; set; }
    public string userId { get; set; }
}

I there a way to to just get an straight array from the deserialization ?

Cheers

A: 

Unfortunately JSON does not support Type Information while serializing, its pure Object Dictionary rather then full Class Data. You will have to write some sort of extension to extend behaviour of JSON serializer and deserializer in order to support proper type marshelling.

Akash Kava
No, if you specify the correct root type in the call to Deserialize, Json.NET will know the types.
erikkallen
+1  A: 

You could use an anonymous class:

T DeserializeJson<T>(string s, object templateObj) {
    return JsonConvert.Deserialize<T>(s);
}

and then in your code:

return DeserializeJson(jsonString, new { treeNode = new MyObject[0] }).treeNode;
erikkallen