78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Text;
|
|
|
|
namespace WX.CRM.DAL.Redis
|
|
{
|
|
public class DicmalConvert : JsonConverter
|
|
{
|
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
{
|
|
//throw new NotImplementedException();
|
|
Type t = value.GetType();
|
|
if (t == typeof(decimal))
|
|
{
|
|
var val = 0;
|
|
if (int.TryParse(string.Format("{0:#0.####}", value), out val))
|
|
writer.WriteValue(val);
|
|
else
|
|
writer.WriteValue(value);
|
|
}
|
|
else
|
|
writer.WriteValue(value);
|
|
}
|
|
|
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
|
{
|
|
//throw new NotImplementedException();
|
|
if (reader.TokenType == JsonToken.Null)
|
|
return null;
|
|
if (objectType == typeof(decimal))
|
|
{
|
|
return decimal.Parse(string.Format("{0:#0.####}", reader.Value));
|
|
}
|
|
else if (objectType == typeof(float))
|
|
{
|
|
return float.Parse(string.Format("{0:#0.####}", reader.Value));
|
|
}
|
|
return reader.Value;
|
|
}
|
|
|
|
public override bool CanConvert(Type objectType)
|
|
{
|
|
return objectType == typeof(decimal);
|
|
}
|
|
}
|
|
public class JsonRedisValueConverter : ObjectRedisValueConverterBase
|
|
{
|
|
public JsonSerializerSettings JsonSettings { get; private set; }
|
|
|
|
public JsonRedisValueConverter()
|
|
{
|
|
JsonSettings = new JsonSerializerSettings()
|
|
{
|
|
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
|
|
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
|
|
};
|
|
}
|
|
|
|
protected override object DeserializeCore(Type type, byte[] value)
|
|
{
|
|
//JsonSettings.Converters.Add(new DicmalConvert());
|
|
return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(value), type, JsonSettings);
|
|
}
|
|
|
|
protected override byte[] SerializeCore(object value)
|
|
{
|
|
//var scriptSerializer = JsonSerializer.Create(JsonSettings);
|
|
//using (var sw = new StringWriter())
|
|
//{
|
|
// scriptSerializer.Serialize(sw, value);
|
|
// return Encoding.UTF8.GetBytes(sw.ToString());
|
|
//}
|
|
//JsonSettings.Converters.Add(new DicmalConvert());
|
|
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value, JsonSettings));
|
|
}
|
|
}
|
|
}
|