转换器如下:
public class LongJsonConverter : JsonConverter { public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JToken jt = JValue.ReadFrom(reader); return jt.Value<long>(); } public override bool CanConvert(Type objectType) { return typeof(long).Equals(objectType); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { serializer.Serialize(writer, value.ToString()); } }
全局设置如下:
public static void AddApi(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); services.AddControllers(options => { options.Filters.Add<AsyncExceptionFilter>(); options.Filters.Add<AsyncAuthorizationFilter>(); //替换默认json引擎,改用newtonsoftjson }).AddNewtonsoftJson(options => { options.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //options.SerializerSettings.Converters.Add(new LongJsonConverter()); }); }
然后4核16g的服务器cpu开始飙起来了,每个字段反射匹配是否long,改成注解后cpu正常了。