Webapi中使用Newtonsoft.Json序列化数据

时间:2024-05-24 07:22:11

起笔:

应项目需要,确定好前端和后端项目之统一使用“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测试

Webapi中使用Newtonsoft.Json序列化数据

结尾:

大家是否可以看到,通过增加上面配置项后,我们都不用设定json作为默认的返回类型,通用型问题的解决方案;

当然文章内容仅仅展示Newtonsoft.json的冰山一角,有兴趣的伙伴们可以再继续深入研究-Newtonsoft.Json高级用法