起笔:
应项目需要,确定好前端和后端项目之统一使用“json”进行数据传输;此时在后端遇到一个问题,因为后端使用的是WebAPI技术,数据返回有两种方式;XML和Json,默认使用的方式是xml,但是不同的浏览器也会使用json进行传输,所以这里不是一个确定的值,那么我们要确定所有浏览器都是通过json返回数据,详细配置如下:
//WebApiConfig配置文件
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
过程:
参照网上的一般做法,虽然使用json方式返回数据,但是会遇到一些小瑕疵;此时如果将数据传输到前端的话,不符合前端接收数据一些要求;
一、遗留瑕疵
1:DateTime(日期后存在一个‘T’);2:日期的格式化(日期并不能格式化);3:循环引用;4:属性名开头小写(类中属性都是大写)等等。
二、可替代的类库
Newtonsoft.json闪亮登场,开源的世界级的Json操作类库,不光可以解决以上问题,同时性能方面也是json类库不可匹敌的,在几个序列化类库也是具有明显优势;性能测试-序列化效率比拼——谁是最后的赢家Newtonsoft.Json
三、使用方式
#region Newtonsoft.json替换为Json
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
{
//忽略循环引用,如果设置为Error,则遇到循环引用的时候报错
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Newtonsoft.Json.Formatting.Indented,
//小驼峰命名法
ContractResolver = new CamelCasePropertyNamesContractResolver(),
//格式化日期时间
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateFormatString = "yyyy-MM-dd HH:mm:ss",
//空值处理
//NullValueHandling = NullValueHandling.Ignore
};
#endregion
四、swagger测试
结尾:
大家是否可以看到,通过增加上面配置项后,我们都不用设定json作为默认的返回类型,通用型问题的解决方案;
当然文章内容仅仅展示Newtonsoft.json的冰山一角,有兴趣的伙伴们可以再继续深入研究-Newtonsoft.Json高级用法