¿Hay alguna manera de hacer que DataContractJsonSerializer serialice Dictionaries correctamente?

DataContractJsonSerializer no puede serializar diccionarios correctamente.

Mientras que JavaScriptSerializer serializa Diccionarios como {"abc":"xyz","def":42} por ejemplo, DataContractJsonSerializer da [{"Key":"abc","Value":"xyz"},{"Key":"def","Value":42}] lugar.

Esto es realmente problemático y quiero saber cómo puedo serializar correctamente los objetos del Diccionario en mi servicio WCF. Estoy buscando una solución que requiera la menor cantidad de esfuerzo.

ref: http://msdn.microsoft.com/en-us/library/bb412170.aspx

Esta es la solución que finalmente utilicé para ajustar adecuadamente los diccionarios en WCF: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/765f1569-0422-4471-8ec2-1d03b2026771

El uso de DataContractJsonSerializerSettings (disponible desde .NET 4.5) puede hacer esto por usted:

 var serializer = new DataContractJsonSerializer(typeOfObj, new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }); 

Desafortunadamente, esto parece ser un diseño parcial, de acuerdo con la sección “Colecciones, diccionarios y matrices” en http://msdn.microsoft.com/en-us/library/bb412170.aspx

Todas las colecciones, diccionarios y matrices están representados en JSON como matrices.

Aunque esto en la mayoría de los casos provocará una reescritura importante y, por lo tanto, no será factible, puede permitir que su interfaz de servicio WCF acepte y devuelva Stream en cuyo caso puede tomar el control total de la serialización. De esta manera puede usar JavaScriptSerializer , JSON.NET o ServiceStack.JSON para realizar la serialización real y estos serializadores en realidad manejan los diccionarios de una manera más sensata.

DataContractJsonSerializerSettings tiene la propiedad UseSimpleDictionaryFormat y serializa los diccionarios de la forma UseSimpleDictionaryFormat .