Using JavaScriptSerializer.DeserializeObject how can I get back a Dictionary that uses a case insensitive string comparer?

I have some JSON that I need to deserialize so I'm using JavaScriptSerializer.DeserializeObject like:

var jsonObject = serializer.DeserializeObject(line) as Dictionary<string, object>;

The problem is that the Dictionary that comes back has a case-sensitive key comparer, but I need case-insensitive. Is there some way to get back a Dictionary that is case-insensitive?

EDIT: I'd prefer not to copy the data to a new structure, since I have a lot of data and this will be costly.

Answers


Just create a new case insensitive dictionary and populate it with the current one.

var jsonObject = serializer.DeserializeObject(line) as Dictionary<string, object>;
var caseInsensitiveDictionary = new Dictionary<string, object>(jsonObject, StringComparer.OrdinalIgnoreCase);

[UPDATE] Test code:

    Stopwatch stop1 = new Stopwatch();
    Stopwatch stop2 = new Stopwatch();

    //do test 100 000 times
    for (int j = 0; j < 100000; j++)
    {
        //generate fake data
        //object with 50 properties
        StringBuilder json = new StringBuilder();
        json.Append('{');
        for (int i = 0; i < 100; i++)
        {
            json.Append(String.Format("prop{0}:'val{0}',", i));
        }
        json.Length = json.Length - 1;
        json.Append('}');

        var line = json.ToString();

        stop1.Start();
        var serializer = new JavaScriptSerializer();
        var jsonObject = serializer.DeserializeObject(line) as Dictionary<string, object>;
        stop1.Stop();

        stop2.Start();
        var caseInsensitiveDictionary = new Dictionary<string, object>(jsonObject, StringComparer.OrdinalIgnoreCase);
        stop2.Stop();
    }

    Console.WriteLine(stop1.Elapsed);
    Console.WriteLine(stop2.Elapsed);
    Console.Read();

The result is:

Deserializtion time: 1 min 21 sec

Dictionary creation time: 3 sec

So, the main proble is deserializtion. Dictionary creation is about 4%


Need Your Help

How can I download or save JMeter result on my desktop?

unit-testing testing jmeter load-testing performance-testing

I am doing a web based project &amp; took 100 Users, Loop Count: 1 &amp; Ramp Up Period :1 sec for Performance Load Testing of all pages .

Redirecting domain without visibility to the user

.htaccess url mod-rewrite redirect

I have a server with 2 domains parked on it. For example abc.com and xyz.com.