При использовании DataContractJsonSerializer для сериализации словаря, например так:
[CollectionDataContract]
public class Clazz : Dictionary<String,String> {}
....
var c1 = new Clazz();
c1["Red"] = "Rosso";
c1["Blue"] = "Blu";
c1["Green"] = "Verde";
Сериализация c1 с этим кодом:
var dcjs = new DataContractJsonSerializer(c1.GetType());
var json = new Func<String>(() =>
{
using (var ms = new System.IO.MemoryStream())
{
dcjs.WriteObject(ms, c1);
return Encoding.ASCII.GetString(ms.ToArray());
}
})();
... производит этот JSON:
[{"Key":"Red","Value":"Rosso"},
{"Key":"Blue","Value":"Blu"},
{"Key":"Green","Value":"Verde"}]
Но это не ассоциативный массив Javascript. Если я сделаю соответствующую вещь в javascript: создайте словарь, а затем сериализуйте его так:
var a = {};
a["Red"] = "Rosso";
a["Blue"] = "Blu";
a["Green"] = "Verde";
// use utility class from http://www.JSON.org/json2.js
var json = JSON.stringify(a);
Результат:
{"Red":"Rosso","Blue":"Blu","Green":"Verde"}
Как заставить DCJS создавать или использовать сериализованную строку для словаря, совместимого с JSON2.js ?
Я знаю о JavaScriptSerializer из ASP.NET. Не уверен, что это очень дружелюбно к WCF. Относится ли это к атрибутам DataMember, DataContract?