C # JSON Serializzazione del dizionario in {chiave: valore, …} invece di {chiave: chiave, valore: valore, …}

È ansible serializzare un .Net Dictionary in JSON con DataContractJsonSerializer che è del formato:

{ key0:value0, key1:value1, ... } 

Uso il dizionario , perché non esiste una struttura predefinita degli input.

Sono interessante solo per il risultato DataContractJsonSerializer ! Ho già trovato un esempio di “Surrogate”, ma nell’output ci sono altri “dati” e, se il dizionario è, anche l’escape è falso.


Ho trovato la soluzione, che serve! Prima di tutto, una class “dizionario” serializzabile: (Naturalmente, questo esempio funziona solo in un modo, ma non ho bisogno di deserializzazione)

 [Serializable] public class MyJsonDictionary : ISerializable { Dictionary dict = new Dictionary(); public MyJsonDictionary() { } protected MyJsonDictionary( SerializationInfo info, StreamingContext context ) { throw new NotImplementedException(); } public void GetObjectData( SerializationInfo info, StreamingContext context ) { foreach( K key in dict.Keys ) { info.AddValue( key.ToString(), dict[ key ] ); } } public void Add( K key, V value ) { dict.Add( key, value ); } public V this[ K index ] { set { dict[ index ] = value; } get { return dict[ index ]; } } } 

Uso:

 public class MainClass { public static String Serialize( Object data ) { var serializer = new DataContractJsonSerializer( data.GetType() ); var ms = new MemoryStream(); serializer.WriteObject( ms, data ); return Encoding.UTF8.GetString( ms.ToArray() ); } public static void Main() { MyJsonDictionary result = new MyJsonDictionary(); result["foo"] = "bar"; result["Name"] = "John Doe"; result["Age"] = 32; MyJsonDictionary address = new MyJsonDictionary(); result["Address"] = address; address["Street"] = "30 Rockefeller Plaza"; address["City"] = "New York City"; address["State"] = "NY"; Console.WriteLine( Serialize( result ) ); Console.ReadLine(); } } 

E il risultato:

 { "foo":"bar", "Name":"John Doe", "Age":32, "Address":{ "__type":"MyJsonDictionaryOfstringanyType:#Json_Dictionary_Test", "Street":"30 Rockefeller Plaza", "City":"New York City", "State":"NY" } }