26

Is there a way/library that will allow me to customize JSON serialization similar to GSON custom serializers?

Here is what I'm trying to get:

this object: KeyValuePair("Age",10) myAge

will normally get serialized like

"myAge": { "Key": "Age", "Value": 10 }

whilst I want it to serialize like: "Age": 10 instead. Any ideas?

1

1 Answer 1

41

First i suggest to use newton json dll.

Second your need create custom JsonConverter for KeyValuePair<string,int> like this:

  public class PairConverter : JsonConverter
  {
    public override bool CanConvert(Type objectType)
    {
       return objectType == typeof(KeyValuePair<string, int>);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
      throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
      var item = (KeyValuePair<string, int>)value;
      writer.WriteValue(item.Value);
      writer.Flush();
    }
  }

And than add JsonConverter attribute for 'Age' property like this:

 public class Persons
 {
   [JsonConverter(typeof(PairConverter))]
   public KeyValuePair<string, int> Age { get; set; }
 }

Finally, example of usage:

 var persons = new Persons()
 {
    Age = new KeyValuePair<string, int>("Age", 10)
 };
 var json = JsonConvert.SerializeObject(persons); // {Age:10}
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, that's what I was thinking - code sample was quite handy.
Updated Newtonsoft links for JsonConverter Class and Custom JsonConverter sample.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.