- 首先自定义一个
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);
}
}
}
- 定义一个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.

本文介绍了一个自定义的JSON转换器,用于在序列化和反序列化过程中添加和处理额外的对象属性。通过实例展示了如何使用该转换器对City对象进行序列化和反序列化,并分析了序列化结果。
2634

被折叠的 条评论
为什么被折叠?



