該解決方案比預期的更容易。您可以用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