Question

In my senario, there is a piece of code like below in the JSon response entity:

"hashkeys":
{
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
}

The keys like "key1","key2","key3", (and even the number of the keys), are only known at runtime, but cannot be determined at coding time.

How can I code the JSon entity to deserialize such kind of response? I am using C# language DataContractJsonSerializer.

My testing code:

[DataContract]
class Test {
    [DataMember(Name = "hashkeys")]
    public Dictionary<string, string> dic { get; set; }

}

class Program
{
    public static T FromJson<T>(string strJson) where T : class
    {
        DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
        {
            return ds.ReadObject(ms) as T;
        }
    }

    static void Main(string[] args)
    {
        string json = @"{""hashkeys"":{""key1"":""value1"",""key2"":""value2""}}";
        Test MyResponse = FromJson<Test>(json);
        Console.WriteLine(MyResponse);
    }
}
Was it helpful?

Solution

you can use

Make a Dictionary of string and string like this

string json = @"{""key1"":""value1"",""key2"":""value2""}";   
Dictonary<string,string> MyResponse =     JsonConvert.DesirializeObject<Dictionary<string,string>>(json);
Console.WriteLine(values.Count);
// 2
Console.WriteLine(values["key1"]);
// Value1

For more examples and references Click Here

OTHER TIPS

Deserialize it to Dictionary<string, string>.

It's a collection of KeyValuePair<string, string>, which is exactly what you're trying to deal with. "KeyX" will become Key and "valueX" will be the Value for dictionary entiry.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top