MD SHAHIDUL ISLAM
MD SHAHIDUL ISLAM

Reputation: 14523

C# - How to parse json

I have a json string as following

string json = "{\"Method\":\"LOGIN\",\"Skill\":{\"1\":\"SKILL-1\",\"2\":\"SKILL-2\"}}";

I am using JavaScriptSerializer to parse json

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
                               new System.Web.Script.Serialization.JavaScriptSerializer();
var dict = oSerializer.Deserialize<Dictionary<string,object>>(json);

I am getting Method = LOGIN using following line

MessageBox.Show("Method = "+dict["Method"].ToString());

But how to get Skill in a loop. like

Skill

1 = SKILL-1
2 = SKILL-2

Upvotes: 0

Views: 286

Answers (3)

SmartDev
SmartDev

Reputation: 2862

You should declare your own class:

public class YourClassName
{
    public string Method { get; set; }
    public Dictionary<int, string> Skill { get; set; }
}

and deserialize the Json string like this:

var obj = oSerializer.Deserialize<YourClassName>(json);

Upvotes: 1

Ajay
Ajay

Reputation: 6590

Suppose you have following class

public class Data
{
     public string Method { get; set; }
     public Skills Skill { get; set; }
     // If you don't want to use Skills class then you can use this
     //public Dictionary<int, string> Skills { get; set; }
}
public class Skills
{
     public int Id { get; set; }
     public string Skill { get; set; }
}

So you can Deserialize json into Data Object like this

Data deserializedData = JsonConvert.DeserializeObject<Data>(json);

Upvotes: 1

Yuval Itzchakov
Yuval Itzchakov

Reputation: 149598

The value mapping to your Skill key is actually another Dictionary<string, object>. You can iterate it by casting the object:

string json = "{\"Method\":\"LOGIN\",\"Skill\":{\"1\":\"SKILL-1\",\"2\":\"SKILL-2\"}}";

var oSerializer = new JavaScriptSerializer();
var dict = oSerializer.Deserialize<Dictionary<string,object>>(json);

var innerDict = dict["Skill"] as Dictionary<string, object>;

if (innerDict != null)
{
   foreach (var kvp in innerDict)
   {
       Console.WriteLine ("{0} = {1}", kvp.Key, kvp.Value);
   }
}

Or, the alternative would be to map your object into a proper class and deserialize to it instead of a generic Dictionary<string, object>.

Upvotes: 1

Related Questions