在调用JsonConvert.SerializeObject()的时候会出现日期时间
比如:2016-08-22T10:23:38
希望转换的时候不需要T,或者我们需要的只有日期2016-08-22,或者日期是2016/08/22
解决日期时间可使用
IsoDateTimeConverter
namespace Newtonsoft.Json.Converters
{
public class IsoDateTimeConverter : DateTimeConverterBase
{
public IsoDateTimeConverter();
public CultureInfo Culture { get; set; }
public string DateTimeFormat { get; set; }
public DateTimeStyles DateTimeStyles { get; set; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer);
}
}
如果解决日期就不能发挥作用了
此时就要用到JsonSerializerSettings
namespace Newtonsoft.Json
{
public class JsonSerializerSettings
{
public JsonSerializerSettings();
public SerializationBinder Binder { get; set; }
public bool CheckAdditionalContent { get; set; }
public ConstructorHandling ConstructorHandling { get; set; }
public StreamingContext Context { get; set; }
public IContractResolver ContractResolver { get; set; }
public IList<JsonConverter> Converters { get; set; }
public CultureInfo Culture { get; set; }
public DateFormatHandling DateFormatHandling { get; set; }
public DateParseHandling DateParseHandling { get; set; }
public DateTimeZoneHandling DateTimeZoneHandling { get; set; }
public DefaultValueHandling DefaultValueHandling { get; set; }
public EventHandler<ErrorEventArgs> Error { get; set; }
public Formatting Formatting { get; set; }
public int? MaxDepth { get; set; }
public MissingMemberHandling MissingMemberHandling { get; set; }
public NullValueHandling NullValueHandling { get; set; }
public ObjectCreationHandling ObjectCreationHandling { get; set; }
public PreserveReferencesHandling PreserveReferencesHandling { get; set; }
public ReferenceLoopHandling ReferenceLoopHandling { get; set; }
public IReferenceResolver ReferenceResolver { get; set; }
public FormatterAssemblyStyle TypeNameAssemblyFormat { get; set; }
public TypeNameHandling TypeNameHandling { get; set; }
}
}
最后总结一个简单调用的方法如下:
/// <summary>
/// 把对象转换成json
/// </summary>
/// <param name="obj">对象</param>
/// <param name="format">json格式,希望得到的是字符串,还是可读的格式化字符串</param>
/// <param name="datetimeFormat">日期时间格式</param>
/// <returns></returns>
public static string ToJson(this object obj, Formatting format, string datetimeFormat)
{
if (string.IsNullOrEmpty(datetimeFormat))
datetimeFormat = "yyyy-MM-dd HH:mm:ss";
//日期和间都管用
JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
jsSettings.Converters.Add(new IsoDateTimeConverter
{
DateTimeFormat = datetimeFormat
});
return JsonConvert.SerializeObject(obj, format, jsSettings);
//只对日期时间管用
//IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
//timeFormat.DateTimeFormat = datetimeFormat;
//return JsonConvert.SerializeObject(obj, format, timeFormat);
}