C # JSON пользовательская сериализация - PullRequest
22 голосов
/ 28 декабря 2010

Есть ли способ / библиотека, которая позволит мне настроить сериализацию JSON, аналогичную настраиваемым сериализаторам GSON?

Вот что я пытаюсь получить:

этот объект: KeyValuePair ("Age", 10) myAge

обычно сериализуется как

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

, хотя я хочу, чтобы он сериализовался как: "Возраст": 10 вместо этого.Есть идеи?

1 Ответ

37 голосов
/ 28 декабря 2010

Сначала я предлагаю использовать Newton JSON DLL .

Во-вторых, вам нужно создать пользовательский JsonConverter для KeyValuePair, например:

  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();
    }
  }

И затем добавьте атрибут JsonConverter для свойства 'Age', например:

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

Наконец, пример использования:

 var persons = new Persons()
 {
    Age = new KeyValuePair<string, int>("Age", 10)
 };
 var json = JsonConvert.SerializeObject(persons); // {Age:10}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...