一尘不染

C#JSON自定义序列化

json

有没有一种方法/库可以让我像GSON自定义序列化程序一样自定义JSON序列化?

这是我想要得到的:

此对象: KeyValuePair(“ Age”,10)myAge

通常会像

“ myAge”:{“ Key”:“ Age”,“ Value”:10}

同时我希望它进行序列化,例如: “年龄”:10 。有任何想法吗?


阅读 393

收藏
2020-07-27

共1个答案

一尘不染

首先,我建议使用newton json dll

其次,您需要为KeyValuePair
创建自定义JsonConverter,如下所示:

  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属性:

 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}
2020-07-27