+19
-45
@@ -1,55 +1,35 @@
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Threading.Tasks;
|
||||
using System.Reflection;
|
||||
|
||||
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
public class CustomJsonResult : JsonResult
|
||||
{
|
||||
public CustomJsonResult(object value) : base(value) { }
|
||||
|
||||
public override void ExecuteResult(ActionContext context)
|
||||
{
|
||||
var converter = context.HttpContext.RequestServices.GetService<JSONTimeZoneConverter>();
|
||||
|
||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||
string dateFormat;
|
||||
//public class CustomContractResolver : DefaultContractResolver
|
||||
//{
|
||||
// protected override JsonContract CreateContract(Type objectType)
|
||||
// {
|
||||
// var contract = base.CreateContract(objectType);
|
||||
|
||||
if (!isEn_US)
|
||||
{
|
||||
// Chinese date format
|
||||
dateFormat = "yyyy-MM-dd HH:mm:ss";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Default or English date format
|
||||
dateFormat = "MM/dd/yyyy HH:mm:ss";
|
||||
}
|
||||
// // 检查类是否有 LowercaseJsonAttribute 标记
|
||||
// if (objectType.GetCustomAttribute<LowerCamelCaseJsonAttribute>() != null)
|
||||
// {
|
||||
// contract.NamingStrategy = new IRCCamelCaseNamingStrategy();
|
||||
// }
|
||||
|
||||
var serializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
DateFormatString = dateFormat,
|
||||
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
|
||||
ContractResolver = new NullToEmptyStringResolver(),
|
||||
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,
|
||||
// return contract;
|
||||
// }
|
||||
//}
|
||||
|
||||
};
|
||||
serializerSettings.Converters.Add(converter);
|
||||
var json = JsonConvert.SerializeObject(Value, serializerSettings);
|
||||
context.HttpContext.Response.ContentType = "application/json";
|
||||
context.HttpContext.Response.WriteAsync(json);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region 废弃
|
||||
|
||||
public class MyDateTimeConverter : JsonConverter<DateTime>
|
||||
{
|
||||
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
@@ -111,15 +91,9 @@ namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||
{
|
||||
writer.WriteValue(default(DateTime?));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -9,6 +9,8 @@ using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
@@ -20,17 +22,25 @@ namespace IRaCIS.Core.API
|
||||
services.AddHttpContextAccessor();
|
||||
services.AddScoped<JSONTimeZoneConverter>();
|
||||
services.AddScoped<ObjectStorePathConvert>();
|
||||
services.AddScoped<IOSSService,OSSService>();
|
||||
services.AddScoped<IOSSService, OSSService>();
|
||||
|
||||
|
||||
|
||||
builder.AddNewtonsoftJson(options =>
|
||||
{
|
||||
|
||||
//大驼峰
|
||||
//options.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||
//小驼峰
|
||||
//options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
||||
|
||||
|
||||
|
||||
// 忽略循环引用
|
||||
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
||||
|
||||
//处理返回给前端 可空类型 给出默认值 比如in? 为null 设置 默认值0
|
||||
options.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();
|
||||
options.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();
|
||||
|
||||
// 设置时间格式 isEn_US? "MM/dd/yyyy HH:mm:ss" :
|
||||
//options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
||||
@@ -49,7 +59,7 @@ namespace IRaCIS.Core.API
|
||||
})
|
||||
.AddControllersAsServices()//动态webApi属性注入需要
|
||||
.ConfigureApiBehaviorOptions(o =>
|
||||
{
|
||||
{
|
||||
o.SuppressModelStateInvalidFilter = true; //自己写验证
|
||||
|
||||
////这里是自定义验证结果和返回状态码 因为这里是在[ApiController]控制器层校验,动态webApi的不会校验 所以需要单独写一个Filter
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using Newtonsoft.Json;
|
||||
using IRaCIS.Core.Infrastructure.NewtonsoftJson;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
@@ -30,8 +32,20 @@ namespace IRaCIS.Core.API
|
||||
|
||||
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
|
||||
{
|
||||
// 检查类是否有 LowerCamelCaseJsonAttribute 标记 有的话,属性名小写
|
||||
if (type.GetCustomAttribute<LowerCamelCaseJsonAttribute>() != null)
|
||||
{
|
||||
base.NamingStrategy= new LowerCamelCaseNamingStrategy();
|
||||
}
|
||||
else
|
||||
{
|
||||
base.NamingStrategy = null;
|
||||
}
|
||||
|
||||
|
||||
IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
|
||||
|
||||
|
||||
var list= type.GetProperties()
|
||||
.Select(p =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user