Newtonsoft.Json基础问题

Newtonsoft.Json基础问题Newtonsoft Json 基础问题 设置下划线方式 首字母是小写 自定义转换方式实现时间戳

Newtonsoft.Json基础问题

它是.NET下的一个序列化、反序化的基础类库,更基础的用法还是看别人的吧,这里只说一些遇到的问题。

设置下划线

ContractResolver 默认是小驼峰,我想改成下划线方式,遇到了一些问题,dictionary的键未格式化

in controller 创建一个控制器

[HttpGet("getDictionary")] public IDictionary<string, string> GetDictionary() { 
    IDictionary<string, string> dics = new Dictionary<string, string>(); dics.Add("Key", "Value"); dics.Add("Key_Test", "Value_Test"); return dics; } 

In Startup.cs

services .AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions(opt => { 
    // 设置下划线方式,首字母是小写 opt.SerializerSettings.ContractResolver = new DefaultContractResolver() { 
    NamingStrategy = new SnakeCaseNamingStrategy() }; }); 

此时运行后,得到的是Key,而不是key,我想他的键都变成下划线方式的小写

{ 
    "Key": "Value", "KeyTest": "Value_Test" } 

其他测试,增加多级,测试正常

[HttpGet("get")] public dynamic Get() { 
    return new { 
    Content = new { 
    Url=Request.Path.Value, NewUrlTest="test in new url test" } }; } 

此时运行后,满足要求,多层结构也不会影响

{ 
    "content": { 
    "url": "/test/get", "new_url_test": "test in new url test" } } 
services .AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions(opt => { 
    // 设置下划线方式,首字母是小写 opt.SerializerSettings.ContractResolver = new DefaultContractResolver() { 
    NamingStrategy = new SnakeCaseNamingStrategy { 
    ProcessDictionaryKeys = true } }; }); 
{ 
    "key": "Value", "key_test": "Value_Test" } 

实现时间戳

前台要的格式为 34,只有一个数字,我搜索了一下,也没找到相关的文档,本身这个类库有一些时间戳,不过他们都包含特殊字符,如/Date(34)/,好像类似这样,他好像在逗我,为啥他要加Date,怕是有毒吧。看到
他有Converters属性可配置,即配置自己的序列化返回格式。

services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions(opt => { 
    //opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:MM:ss"; //设置时间戳格式 opt.SerializerSettings.Converters = new List<JsonConverter>() { 
    new LinCmsTimeConverter() }; }); 

这里的时间戳是毫秒级别

///  /// 配合LinCMS中的时间戳 后台只返回 34 ///  public class LinCmsTimeConverter : DateTimeConverterBase { 
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { 
    double javaScriptTicks = 0; if (value is DateTime dateTime) { 
    javaScriptTicks = ConvertDateTimeInt(dateTime); } else { 
    if (!(value is DateTimeOffset dateTimeOffset)) throw new JsonSerializationException("Expected date object value."); javaScriptTicks = ConvertDateTimeInt(dateTimeOffset.ToUniversalTime().UtcDateTime); } writer.WriteValue(javaScriptTicks); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { 
    return ConvertIntDateTime(double.Parse(reader.Value.ToString())); } ///  /// 日期转换为时间戳(时间戳单位毫秒) ///  ///  /// 
     public static DateTime ConvertIntDateTime(double milliseconds) { 
    return new DateTime(1970, 1, 1).AddMilliseconds(milliseconds); } public static double ConvertDateTimeInt(DateTime aDt) { 
    return (aDt - new DateTime(1970, 1, 1)).TotalMilliseconds; } } 

参考

  • https://github.com/JamesNK/Newtonsoft.Json/issues/2088
  • https://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_Serialization_NamingStrategy_ProcessDictionaryKeys.htm
  • https://blog.csdn.net/yw1688/article/details/
  • https://www.jianshu.com/p/c53b1a2a121d
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214650.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:46
下一篇 2026年3月18日 下午3:46


相关推荐

  • qmake中文官方文档

    qmake中文官方文档qmakeQMake提供了一个用于管理应用程序,库,其他组件的构建过程的面向工程系统QMake扩展了每个工程文件的信息,生成一个执行编译和连接过程的Makefile本文翻译自Qt4.8官方文档。一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的Mak

    2022年5月19日
    47
  • intellij idea激活码【中文破解版】

    (intellij idea激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    81
  • Hi3516A开发–视频接口[通俗易懂]

    Hi3516A开发–视频接口[通俗易懂]参看:几种常用的视频接口我们经常在家里的电视机、各种播放器上,视频会议产品和监控产品的编解码器的视频输入输出接口上看到很多视频接口,这些视频接口哪些是模拟接口、哪些是数字接口,哪些接口可以传输高清图像等,下面就做一个详细的介绍。  目前最基本的视频接口是复合视频接口、S-vidio接口;另外常见的还有色差接口、VGA接口、接口、HDMI接口、SDI接口。  1、复合

    2022年5月15日
    66
  • javaScript动态添加Li元素「建议收藏」

    javaScript动态添加Li元素「建议收藏」html代码块**javaScript动态添加Li元素**ulli{list-style:none;display:block;text-align

    2022年6月22日
    82
  • sublime Text3配置及快捷键、插件推荐总结

    sublime Text3配置及快捷键、插件推荐总结

    2021年11月29日
    50
  • goland2021。1.1激活码【注册码】

    goland2021。1.1激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号