该解决方案比预期的更容易。您可以用GlobalConfiguration
注册JsonConverter
。我做了一个关于JsonConverter
的抽象包装,如下所示,这个想法来自以下SO线程:How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects?。
public abstract class CustomJsonConverter<T, TResult> : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Load JObject from stream
JObject jObject = JObject.Load(reader);
// Create target object based on JObject
T target = Create(objectType, jObject);
// Populate the object properties
serializer.Populate(jObject.CreateReader(), target);
return target;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
T typedValued = (T)value;
TResult valueToSerialize = Convert(typedValued);
serializer.Serialize(writer, valueToSerialize);
}
public override bool CanConvert(Type objectType)
{
return typeof (T) == objectType;
}
protected virtual T Create(Type type, JObject jObject)
{
var simpleValue = jObject.Value<TResult>();
return Convert(simpleValue);
}
protected abstract TResult Convert(T value);
protected abstract T Convert(TResult value);
}
然后,您可以用它来执行类似以下
public class DateTimeToStringJsonConverter : CustomJsonConverter<DateTime, string>
{
protected override string Convert(DateTime value)
{
return value.ToString();
}
protected override DateTime Convert(string value)
{
return DateTime.Parse(value);
}
}
最后用GlobalConfiguration
在Global.asax.cs中注册一个实例
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new DateTimeToStringJsonConverter());
任何想法/想法/意见?谢谢!
您正在使用哪个'Json Serializer'? – haim770
我们目前使用WebApi的默认序列化程序,对于JSON我相信它是JSON.NET序列化程序 – mhand