整理NetonsoftJson 代码
parent
19ebd117bc
commit
ff589abd2c
|
@ -124,4 +124,75 @@ namespace IRaCIS.Core.API
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region 废弃
|
||||||
|
|
||||||
|
public class MyDateTimeConverter : JsonConverter<DateTime>
|
||||||
|
{
|
||||||
|
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
return reader.ReadAsDateTime().Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
|
string dateFormat;
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.WriteValue(value.ToString(dateFormat));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MyNullableDateTimeConverter : JsonConverter<DateTime?>
|
||||||
|
{
|
||||||
|
public override DateTime? ReadJson(JsonReader reader, Type objectType, DateTime? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var val = reader.ReadAsDateTime();
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteJson(JsonWriter writer, DateTime? value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
|
string dateFormat;
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.HasValue)
|
||||||
|
{
|
||||||
|
writer.WriteValue(value.Value.ToString(dateFormat));
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writer.WriteValue(default(DateTime?));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
using IRaCIS.Core.Domain.Share;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.API
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
//public class CustomContractResolver : DefaultContractResolver
|
|
||||||
//{
|
|
||||||
// protected override JsonContract CreateContract(Type objectType)
|
|
||||||
// {
|
|
||||||
// var contract = base.CreateContract(objectType);
|
|
||||||
|
|
||||||
// // 检查类是否有 LowercaseJsonAttribute 标记
|
|
||||||
// if (objectType.GetCustomAttribute<LowerCamelCaseJsonAttribute>() != null)
|
|
||||||
// {
|
|
||||||
// contract.NamingStrategy = new IRCCamelCaseNamingStrategy();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return contract;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 废弃
|
|
||||||
|
|
||||||
public class MyDateTimeConverter : JsonConverter<DateTime>
|
|
||||||
{
|
|
||||||
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
||||||
{
|
|
||||||
return reader.ReadAsDateTime().Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
|
|
||||||
{
|
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
|
||||||
|
|
||||||
string dateFormat;
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.WriteValue(value.ToString(dateFormat));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MyNullableDateTimeConverter : JsonConverter<DateTime?>
|
|
||||||
{
|
|
||||||
public override DateTime? ReadJson(JsonReader reader, Type objectType, DateTime? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
||||||
{
|
|
||||||
var val = reader.ReadAsDateTime();
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteJson(JsonWriter writer, DateTime? value, JsonSerializer serializer)
|
|
||||||
{
|
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
|
||||||
|
|
||||||
string dateFormat;
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value.HasValue)
|
|
||||||
{
|
|
||||||
writer.WriteValue(value.Value.ToString(dateFormat));
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writer.WriteValue(default(DateTime?));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
|
@ -22,13 +22,6 @@ namespace IRaCIS.Core.API
|
||||||
builder.AddNewtonsoftJson(options =>
|
builder.AddNewtonsoftJson(options =>
|
||||||
{
|
{
|
||||||
|
|
||||||
//大驼峰
|
|
||||||
//options.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
|
||||||
//小驼峰
|
|
||||||
//options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 忽略循环引用
|
// 忽略循环引用
|
||||||
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
||||||
|
|
||||||
|
@ -40,10 +33,18 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
|
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
|
||||||
|
|
||||||
|
#region 废弃
|
||||||
|
//大驼峰
|
||||||
|
//options.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||||
|
//小驼峰
|
||||||
|
//options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//二者只能取其一
|
//二者只能取其一
|
||||||
//options.SerializerSettings.Converters.Add(new MyDateTimeConverter());
|
//options.SerializerSettings.Converters.Add(new MyDateTimeConverter());
|
||||||
//options.SerializerSettings.Converters.Add(new MyNullableDateTimeConverter());
|
//options.SerializerSettings.Converters.Add(new MyNullableDateTimeConverter());
|
||||||
|
#endregion
|
||||||
|
|
||||||
//必须放在后面
|
//必须放在后面
|
||||||
options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<JSONTimeZoneConverter>());
|
options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<JSONTimeZoneConverter>());
|
||||||
|
@ -55,6 +56,7 @@ namespace IRaCIS.Core.API
|
||||||
{
|
{
|
||||||
o.SuppressModelStateInvalidFilter = true; //自己写验证
|
o.SuppressModelStateInvalidFilter = true; //自己写验证
|
||||||
|
|
||||||
|
#region 废弃验证
|
||||||
////这里是自定义验证结果和返回状态码 因为这里是在[ApiController]控制器层校验,动态webApi的不会校验 所以需要单独写一个Filter
|
////这里是自定义验证结果和返回状态码 因为这里是在[ApiController]控制器层校验,动态webApi的不会校验 所以需要单独写一个Filter
|
||||||
//o.InvalidModelStateResponseFactory = (context) =>
|
//o.InvalidModelStateResponseFactory = (context) =>
|
||||||
//{
|
//{
|
||||||
|
@ -65,7 +67,7 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
//return new JsonResult(ResponseOutput.NotOk("The inputs supplied to the API are invalid. " + JsonConvert.SerializeObject( error)));
|
//return new JsonResult(ResponseOutput.NotOk("The inputs supplied to the API are invalid. " + JsonConvert.SerializeObject( error)));
|
||||||
//};
|
//};
|
||||||
|
#endregion
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,27 +8,11 @@ using System.Reflection;
|
||||||
|
|
||||||
namespace IRaCIS.Core.API
|
namespace IRaCIS.Core.API
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// LowerCamelCaseJsonAttribute 可以设置类小写返回给前端
|
||||||
|
/// </summary>
|
||||||
public class NullToEmptyStringResolver : DefaultContractResolver
|
public class NullToEmptyStringResolver : DefaultContractResolver
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// 创建属性
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="type">类型</param>
|
|
||||||
/// <param name="memberSerialization">序列化成员</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
//protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
|
|
||||||
//{
|
|
||||||
// IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
|
|
||||||
|
|
||||||
|
|
||||||
// foreach (var jsonProperty in properties)
|
|
||||||
// {
|
|
||||||
// jsonProperty.DefaultValue = new NullToEmptyStringValueProvider(jsonProperty);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return properties;
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
|
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
|
||||||
{
|
{
|
||||||
|
@ -65,4 +49,37 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public class NullToEmptyStringValueProvider : IValueProvider
|
||||||
|
{
|
||||||
|
PropertyInfo _MemberInfo;
|
||||||
|
public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
|
||||||
|
{
|
||||||
|
_MemberInfo = memberInfo;
|
||||||
|
}
|
||||||
|
public object GetValue(object target)
|
||||||
|
{
|
||||||
|
object result = _MemberInfo.GetValue(target);
|
||||||
|
if (_MemberInfo.PropertyType == typeof(string) && result == null) result = "";
|
||||||
|
else if (_MemberInfo.PropertyType == typeof(String[]) && result == null) result = new string[] { };
|
||||||
|
//else if (_MemberInfo.PropertyType == typeof(Nullable<Int32>) && result == null) result = 0;
|
||||||
|
//else if (_MemberInfo.PropertyType == typeof(Nullable<Decimal>) && result == null) result = 0.00M;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public void SetValue(object target, object value)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (_MemberInfo.PropertyType == typeof(string))
|
||||||
|
{
|
||||||
|
//去掉前后空格
|
||||||
|
_MemberInfo.SetValue(target, value == null ? string.Empty : value.ToString() == string.Empty ? value : value/*.ToString().Trim()*/);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_MemberInfo.SetValue(target, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.API
|
|
||||||
{
|
|
||||||
|
|
||||||
public class NullToEmptyStringValueProvider : IValueProvider
|
|
||||||
{
|
|
||||||
PropertyInfo _MemberInfo;
|
|
||||||
public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
|
|
||||||
{
|
|
||||||
_MemberInfo = memberInfo;
|
|
||||||
}
|
|
||||||
public object GetValue(object target)
|
|
||||||
{
|
|
||||||
object result = _MemberInfo.GetValue(target);
|
|
||||||
if (_MemberInfo.PropertyType == typeof(string) && result == null) result = "";
|
|
||||||
else if (_MemberInfo.PropertyType == typeof(String[]) && result == null) result = new string[] { };
|
|
||||||
//else if (_MemberInfo.PropertyType == typeof(Nullable<Int32>) && result == null) result = 0;
|
|
||||||
else if (_MemberInfo.PropertyType == typeof(Nullable<Decimal>) && result == null) result = 0.00M;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
public void SetValue(object target, object value)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (_MemberInfo.PropertyType == typeof(string))
|
|
||||||
{
|
|
||||||
//去掉前后空格
|
|
||||||
_MemberInfo.SetValue(target, value == null ? string.Empty : value.ToString() == string.Empty ? value : value/*.ToString().Trim()*/);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_MemberInfo.SetValue(target, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue