此文引用原文http://www.cnblogs.com/liuhuan01/p/5525231.html的升级版
在用的时候发现新版本的旧方法已经改写了,所以重新修改后的新版也达到一样的效果
一,自定义json格式化器
public class JsonNetFormatter : MediaTypeFormatter
{
private static readonly MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/json");
private readonly JsonSerializerSettings jsonSerializerSettings;
public JsonNetFormatter(JsonSerializerSettings jsonSerializerSettings)
{
this.jsonSerializerSettings = jsonSerializerSettings ?? new JsonSerializerSettings();
SupportedMediaTypes.Add(mediaType);
SupportedEncodings.Add( new UTF8Encoding(false, true));
}
public static MediaTypeHeaderValue DefaultMediaType
{
get { return mediaType; }
}
public override bool CanReadType(Type type)
{
return CanReadTypeCore(type);
}
public override bool CanWriteType(Type type)
{
return CanReadTypeCore(type);
}
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
{
var serializer = JsonSerializer.Create(jsonSerializerSettings);
return Task.Factory.StartNew(() =>
{
using (var streamWriter = new StreamWriter(writeStream, Encoding.UTF8))
{
using (var jsonTextWriter = new JsonTextWriter(streamWriter))
{
serializer.Serialize(jsonTextWriter, value);
}
}
});
}
private static bool CanReadTypeCore(Type type)
{
if (type == typeof(BaseJsonMediaTypeFormatter))
{
return false;
}
return true;
}
}
二,在控制器中添加
[Serializable()]
[DataContract(IsReference = true)]
public class apiController : ApiController
{}
三,在全Global里添加我们写的json格式化器
在Application_Start方法里添加,加在最前面
#region 自定义API Json格式化器
HttpConfiguration config = GlobalConfiguration.Configuration;
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new IsoDateTimeConverter());
JsonNetFormatter formatter = new JsonNetFormatter(settings);
config.Formatters.Insert(0, formatter);
#endregion