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.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.