8

I have an [DataContract] object that has some properties and is serialized to JSON using DataContractJsonSerializer.

One of the properties is of type Dictionary<string, string> and when the serialization happens it produces the following JSON schema.

"extra_data": [
  {
    "Key": "aKey",
    "Value": "aValue"
  }
]

Now I need the JSON schema to be like this

"extra_data": { 
        "aKey": "aValue"
}

You can never of course know before what the values are, it is a Dictionary that the user will set keys and values.

I'm thinking if this can happen using anonymous types, or is there a configuration I can take to accomplish my goal?

Thank you.

a-ctor
  • 3,568
  • 27
  • 41
George Taskos
  • 8,324
  • 18
  • 82
  • 147

1 Answers1

2

Ok, let say you have:

[DataContract]
public class MyObject
{
    [DataMember(Name = "extra_data")]
    public Dictionary<string, string> MyDictionary { get; set; } 

}

Then you can use DataContractJsonSerializerSettings with UseSimpleDictionaryFormat set to true, something like this:

    var myObject = new MyObject { MyDictionary = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } } };

    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true };

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyObject), settings);

    var result = string.Empty;

    using (MemoryStream ms = new MemoryStream())
    {
        serializer.WriteObject(ms, myObject);

        result = Encoding.Default.GetString(ms.ToArray());
    }
Jevgenij Nekrasov
  • 2,690
  • 3
  • 30
  • 51