JSON继承JsonConverter序列化与反序列化重写类属性 骑猪看日落 2021-06-26 16:06 324阅读 0赞 1. 首先自定义一个`JSON`类,继承`JsonConverter`,把类的属性重写到`JSON`中. using System; using System.Collections.Generic; using System.Linq; using System.Text; using GongHuiNewtonsoft.Json; using GongHuiNewtonsoft.Json.Linq; namespace JSONDemo { public class CustomConverter : JsonConverter { private readonly Type[] _types; public CustomConverter(params Type[] types) { this._types = types; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { JToken t = JToken.FromObject(value); if (t.Type != JTokenType.Object) { t.WriteTo(writer); } else { JObject jo = (JObject)t; IList<string> propertyNameList = jo.Properties().Select(p => p.Name).ToList(); jo.AddFirst(new JProperty("Keys", new JArray(propertyNameList))); jo.WriteTo(writer); } } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException("Unnecessary because CanRead is false.The type will skip the converter."); } public override bool CanRead { get { return false; } } public override bool CanConvert(Type objectType) { return _types.Any(t => t == objectType); } } } 1. 定义一个City对象 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JSONDemo { public class City { public string Country { get; set; } public IList<string> Name { get; set; } public City() { this.Name = new List<string> { "Auckland", "Wellington", "Hamilton" }; } } } 3.序列化与反序列化 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using GongHuiNewtonsoft.Json; using GongHuiNewtonsoft.Json.Serialization; using GongHuiNewtonsoft.Json.Converters; namespace JSONDemo { class Program { static void Main(string[] args) { City city = new City { Country = "New Zealand" }; Console.WriteLine("------------自定义序列化添加对象属性------------"); string json = JsonConvert.SerializeObject(city, Formatting.Indented, new CustomConverter(typeof(City))); Console.WriteLine(json); Console.WriteLine("------------自定义反序列化添加对象属性------------"); City newCity = JsonConvert.DeserializeObject<City>(json, new CustomConverter(typeof(City))); Console.WriteLine(newCity.Country); Console.WriteLine(newCity.Name.Count); Console.WriteLine(string.Join("/", newCity.Name.ToArray())); } } } 4.运行的结果,注意:序列化`City`对象时,添加了`Keys`对象的属性,反序列化时属性中的值多添加了一次,使得`Name`属性总数量是`6`.,而不是`3`. ![在这里插入图片描述][20181013142309769] [20181013142309769]: /images/20210626/1f31fa3920f04447b6cac94ff160c2e6.png
还没有评论,来说两句吧...