Apparently, IDictionary is serialized as an array of KeyValuePair objects (e.g., [{Key:\"foo\", Value:\"bar\"}, ...]
IDictionary
KeyValuePair
[{Key:\"foo\", Value:\"bar\"}, ...]
I was able to solve with JavaScriptSerializer with Linq Select:
var dictionary = new Dictionary(); var jsonOutput = new JavaScriptSerializer().Serialize(dictionary.Select(x => new { Id = x.Key, DisplayText = x.Value }));