在.NET使用JSON作为数据交换格式

Newtonsoft.Json .net framework 3.5 和.net framework 4.0两个版本 Newtonsoft.Json 针对 .net framework 3.5 和.net framework 4.0两个版本,存放在两个文件夹 立即下载

来自:http://blog.youkuaiyun.com/zhoufoxcn/article/details/6254657 

我们知道在.NET中我们有多种对象序列化的方式,如XML方式序列化、Binary序列化,其中XML序列化是一种比较通用的在各语言之间传递数据的方式。除了这两种序列化方式之外,在.NET中还可以使用JSON序列化。
JSON(JavaScript Object Notation)是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。在.NET中有三种常用的JSON序列化的类,分别是System.Web.Script.Serialization.JavaScriptSerializer类、System.Runtime.Serialization.Json.DataContractJsonSerializer类和Newtonsoft.Json.JsonConvert类。
为了便于下面的演示,下面提供一个类的代码:

  1. [DataContract]  
  2. public class User  
  3. {  
  4.     /// <summary>  
  5.     /// 编号  
  6.     /// </summary>  
  7.     [DataMember]  
  8.     public int UserId { get; set; }  
  9.     /// <summary>  
  10.     /// 用户名  
  11.     /// </summary>  
  12.     [DataMember]  
  13.     public string UserName { get; set; }  
  14.     /// <summary>  
  15.     /// 创建时间  
  16.     /// </summary>  
  17.     [DataMember]  
  18.     [JsonConverter(typeof(IsoDateTimeConverter))]  
  19.     public DateTime CreateDate { get; set; }  
  20.     /// <summary>  
  21.     /// 生日  
  22.     /// </summary>  
  23.     [DataMember]  
  24.     [JsonConverter(typeof(JavaScriptDateTimeConverter))]  
  25.     public DateTime Birthday { get; set; }  
  26.     /// <summary>  
  27.     /// 相关URL  
  28.     /// </summary>  
  29.     [DataMember]  
  30.     public List<string> Urls { get; set; }  
  31.     /// <summary>  
  32.     /// 薪水  
  33.     /// </summary>  
  34.     //[ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段  
  35.     //[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段  
  36.     //[JsonIgnore]//使用JsonConvert序列化时不序列化此字段  
  37.     public int Salary { get; set; }  
  38.     /// <summary>  
  39.     /// 权利级别  
  40.     /// </summary>  
  41.     [DataMember]  
  42.     public Priority Priority { get; set; }  
  43.   
  44.     public User()  
  45.     {  
  46.         Urls = new List<string>();  
  47.     }  
  48. }  
  49. /// <summary>  
  50. /// 权利级别  
  51. /// </summary>  
  52. public enum Priority:byte  
  53. {  
  54.     Lowest=0x1,  
  55.     BelowNormal=0x2,  
  56.     Normal=0x4,  
  57.     AboveNormal=0x8,  
  58.     Highest=0x16  
  59. }  


使用System.Web.Script.Serialization.JavaScriptSerializer类
System.Web.Script.Serialization.JavaScriptSerializer类是.NET类库中自带的一种JSON序列化实现,在.NET Framework3.5及以后版本中可以使用这个类,这个类位于System.Web.Extensions.dll中,使用这个类是必须添加对这个dll的引用。
下面的代码是使用JavaScriptSerializer进行序列化和反序列化的例子:

  1. public static void JavaScriptSerializerDemo()  
  2. {  
  3.     User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30),Birthday=DateTime.Now.AddYears(-50), Priority = Priority.Highest, Salary = 500000 };  
  4.     //JavaScriptSerializer类在System.Web.Extensions.dll中,注意添加这个引用  
  5.     JavaScriptSerializer serializer = new JavaScriptSerializer();  
  6.     //JSON序列化  
  7.     string result=serializer.Serialize(user);  
  8.     Console.WriteLine("使用JavaScriptSerializer序列化后的结果:{0},长度:{1}", result, result.Length);  
  9.     //JSON反序列化  
  10.     user = serializer.Deserialize<User>(result);  
  11.     Console.WriteLine("使用JavaScriptSerializer反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  12.   
  13. }  

说明:如果不想序列化某个字段,可以在字段前面加[JsonIgnore]标记。


使用System.Runtime.Serialization.Json.DataContractJsonSerializer类
System.Runtime.Serialization.Json.DataContractJsonSerializer类位于System.ServiceModel.Web.dll中,使用这个类时除了需要添加对System.ServiceModel.Web.dll的引用之外,还需要添加System.Runtime.Serialization.dll的引用,注意这个类也是在.NET Framework3.5及以后版本中可以使用。
下面是使用DataContractJsonSerializer类的例子:

  1. public static void DataContractJsonSerializerDemo()  
  2. {  
  3.     User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.AboveNormal, Salary = 50000 };  
  4.     string result = string.Empty;  
  5.     //DataContractJsonSerializer类在System.ServiceModel.Web.dll中,注意添加这个引用  
  6.     DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));  
  7.       
  8.     using (MemoryStream stream = new MemoryStream())  
  9.     {  
  10.         //JSON序列化  
  11.         serializer.WriteObject(stream, user);  
  12.         result = Encoding.UTF8.GetString(stream.ToArray());  
  13.         Console.WriteLine("使用DataContractJsonSerializer序列化后的结果:{0},长度:{1}", result, result.Length);  
  14.     }  
  15.   
  16.     //JSON反序列化  
  17.     byte[] buffer = Encoding.UTF8.GetBytes(result);  
  18.     using (MemoryStream stream = new MemoryStream(buffer))  
  19.     {  
  20.         user = serializer.ReadObject(stream) as User;  
  21.         Console.WriteLine("使用DataContractJsonSerializer反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  22.     }  
  23. }  

注意:要使用DataContractJsonSerializer类进行序列化和反序列化,必须给类加上[DataContract]属性,对要序列化的字段加上[DataMember]属性,如果不想序列化某个字段或者属性,可以加上[IgnoreDataMember]属性。


使用Newtonsoft.Json.JsonConvert类
Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。
下面是使用Newtonsoft.Json.JsonConvert类的例子:

  1. public static void JsonConvertDemo()  
  2. {  
  3.     User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary = 5000 };  
  4.     //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用  
  5.     //JSON序列化  
  6.     string result = JsonConvert.SerializeObject(user);  
  7.     Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);  
  8.     //JSON反序列化  
  9.     user = JsonConvert.DeserializeObject<User>(result);  
  10.     Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  11. }  
  12.   
  13. public static void JsonConvertLinqDemo()  
  14. {  
  15.     User user = new User { UserId = 1, UserName = "周公", CreateDate = DateTime.Now.AddYears(-8), Birthday = DateTime.Now.AddYears(-32), Priority = Priority.Lowest, Salary = 500, Urls = new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.youkuaiyun.com/zhoufoxcn" } };  
  16.     //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用  
  17.     //JSON序列化  
  18.     string result = JsonConvert.SerializeObject(user);  
  19.     Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);  
  20.     //使用Linq to JSON  
  21.     JObject jobject = JObject.Parse(result);  
  22.     JToken token = jobject["Urls"];  
  23.     List<string> urlList = new List<string>();  
  24.     foreach (JToken t in token)  
  25.     {  
  26.         urlList.Add(t.ToString());  
  27.     }  
  28.     Console.Write("使用Linq to JSON反序列化后的结果:[");  
  29.     for (int i = 0; i < urlList.Count - 1;i++ )  
  30.     {  
  31.         Console.Write(urlList[i] + ",");  
  32.     }  
  33.     Console.WriteLine(urlList[urlList.Count - 1] + "]");  
  34. }  

注意:如果有不需要序列化的字段,可以给该字段添加[JsonIgnore]标记。在Newtonsoft这个类库中对于日期的序列化有多种方式,可以类的DataTime成员添加上对应的标记,这样在进行序列化和反序列化时就会按照指定的方式进行,在本例中User类的CreateDate属性添加的属性是[JsonConverter(typeof(IsoDateTimeConverter))],而Birthday属性添加的属性是[JsonConverter(typeof(JavaScriptDateTimeConverter))],从序列化的结果可以看出来它们最终的表现形式并不一样。
本文中所有的示例代码如下:
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Web.Script.Serialization;  
  6. using System.Runtime.Serialization.Json;  
  7. using System.IO;  
  8. using System.Runtime.Serialization;  
  9. using Newtonsoft.Json;  
  10. using Newtonsoft.Json.Linq;  
  11. using Newtonsoft.Json.Converters;  
  12.   
  13. namespace JSONDemo  
  14. {  
  15. class Program  
  16. {  
  17.     static void Main(string[] args)  
  18.     {  
  19.         JavaScriptSerializerDemo();  
  20.         DataContractJsonSerializerDemo();  
  21.         JsonConvertDemo();  
  22.         JsonConvertLinqDemo();  
  23.         Console.ReadLine();  
  24.     }  
  25.   
  26.     public static void JavaScriptSerializerDemo()  
  27.     {  
  28.         User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30),Birthday=DateTime.Now.AddYears(-50), Priority = Priority.Highest, Salary = 500000 };  
  29.         //JavaScriptSerializer类在System.Web.Extensions.dll中,注意添加这个引用  
  30.         JavaScriptSerializer serializer = new JavaScriptSerializer();  
  31.         //JSON序列化  
  32.         string result=serializer.Serialize(user);  
  33.         Console.WriteLine("使用JavaScriptSerializer序列化后的结果:{0},长度:{1}", result, result.Length);  
  34.         //JSON反序列化  
  35.         user = serializer.Deserialize<User>(result);  
  36.         Console.WriteLine("使用JavaScriptSerializer反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  37.   
  38.     }  
  39.   
  40.     public static void DataContractJsonSerializerDemo()  
  41.     {  
  42.         User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.AboveNormal, Salary = 50000 };  
  43.         string result = string.Empty;  
  44.         //DataContractJsonSerializer类在System.ServiceModel.Web.dll中,注意添加这个引用  
  45.         DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));  
  46.           
  47.         using (MemoryStream stream = new MemoryStream())  
  48.         {  
  49.             //JSON序列化  
  50.             serializer.WriteObject(stream, user);  
  51.             result = Encoding.UTF8.GetString(stream.ToArray());  
  52.             Console.WriteLine("使用DataContractJsonSerializer序列化后的结果:{0},长度:{1}", result, result.Length);  
  53.         }  
  54.   
  55.         //JSON反序列化  
  56.         byte[] buffer = Encoding.UTF8.GetBytes(result);  
  57.         using (MemoryStream stream = new MemoryStream(buffer))  
  58.         {  
  59.             user = serializer.ReadObject(stream) as User;  
  60.             Console.WriteLine("使用DataContractJsonSerializer反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  61.         }  
  62.     }  
  63.   
  64.     public static void JsonConvertDemo()  
  65.     {  
  66.         User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary = 5000 };  
  67.         //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用  
  68.         //JSON序列化  
  69.         string result = JsonConvert.SerializeObject(user);  
  70.         Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);  
  71.         //JSON反序列化  
  72.         user = JsonConvert.DeserializeObject<User>(result);  
  73.         Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);  
  74.     }  
  75.   
  76.     public static void JsonConvertLinqDemo()  
  77.     {  
  78.         User user = new User { UserId = 1, UserName = "周公", CreateDate = DateTime.Now.AddYears(-8), Birthday = DateTime.Now.AddYears(-32), Priority = Priority.Lowest, Salary = 500, Urls = new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.youkuaiyun.com/zhoufoxcn" } };  
  79.         //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用  
  80.         //JSON序列化  
  81.         string result = JsonConvert.SerializeObject(user);  
  82.         Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);  
  83.         //使用Linq to JSON  
  84.         JObject jobject = JObject.Parse(result);  
  85.         JToken token = jobject["Urls"];  
  86.         List<string> urlList = new List<string>();  
  87.         foreach (JToken t in token)  
  88.         {  
  89.             urlList.Add(t.ToString());  
  90.         }  
  91.         Console.Write("使用Linq to JSON反序列化后的结果:[");  
  92.         for (int i = 0; i < urlList.Count - 1;i++ )  
  93.         {  
  94.             Console.Write(urlList[i] + ",");  
  95.         }  
  96.         Console.WriteLine(urlList[urlList.Count - 1] + "]");  
  97.     }  
  98. }  
  99.   
  100. [DataContract]  
  101. public class User  
  102. {  
  103.     /// <summary>  
  104.     /// 编号  
  105.     /// </summary>  
  106.     [DataMember]  
  107.     public int UserId { get; set; }  
  108.     /// <summary>  
  109.     /// 用户名  
  110.     /// </summary>  
  111.     [DataMember]  
  112.     public string UserName { get; set; }  
  113.     /// <summary>  
  114.     /// 创建时间  
  115.     /// </summary>  
  116.     [DataMember]  
  117.     [JsonConverter(typeof(IsoDateTimeConverter))]  
  118.     public DateTime CreateDate { get; set; }  
  119.     /// <summary>  
  120.     /// 生日  
  121.     /// </summary>  
  122.     [DataMember]  
  123.     [JsonConverter(typeof(JavaScriptDateTimeConverter))]  
  124.     public DateTime Birthday { get; set; }  
  125.     /// <summary>  
  126.     /// 相关URL  
  127.     /// </summary>  
  128.     [DataMember]  
  129.     public List<string> Urls { get; set; }  
  130.     /// <summary>  
  131.     /// 薪水  
  132.     /// </summary>  
  133.     [ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段  
  134.     [IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段  
  135.     [JsonIgnore]//使用JsonConvert序列化时不序列化此字段  
  136.     public int Salary { get; set; }  
  137.     /// <summary>  
  138.     /// 权利级别  
  139.     /// </summary>  
  140.     [DataMember]  
  141.     public Priority Priority { get; set; }  
  142.   
  143.     public User()  
  144.     {  
  145.         Urls = new List<string>();  
  146.     }  
  147. }  
  148. /// <summary>  
  149. /// 权利级别  
  150. /// </summary>  
  151. public enum Priority:byte  
  152. {  
  153.     Lowest=0x1,  
  154.     BelowNormal=0x2,  
  155.     Normal=0x4,  
  156.     AboveNormal=0x8,  
  157.     Highest=0x16  
  158. }  
  159. }  

程序的运行结果如下:

[xhtml]  view plain copy
  1. 使用JavaScriptSerializer序列化后的结果:{"UserId":1,"UserName":"李刚","CreateDate":"//Date(353521211984)//","Birthday":"//Date(-277630788015)//","Urls":[],"Priority":22},长度:127  
  2. 使用JavaScriptSerializer反序列化后的结果:UserId:1,UserName:李刚,CreateDate:1981-3-15 16:20:11,Priority:Highest  
  3. 使用DataContractJsonSerializer序列化后的结果:{"Birthday":"//Date(-277630787953+0800)//","CreateDate":"//Date(353521212046+0800)//","Priority":8,"Urls":[],"UserId":1,"UserName":"李刚"},长度:136  
  4. 使用DataContractJsonSerializer反序列化后的结果:UserId:1,UserName:李刚,CreateDate:1981-3-16 0:20:12,Priority:AboveNormal  
  5. 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"李刚","CreateDate":"1981-03-16T00:20:12.1875+08:00","Birthday":new Date(-277630787812),"Urls":[],"Priority":2},长度:132  
  6. 使用JsonConvert反序列化后的结果:UserId:1,UserName:李刚,CreateDate:1981-3-16 0:20:12,Priority:BelowNormal  
  7. 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"周公","CreateDate":"2003-03-16T00:20:12.40625+08:00","Birthday":new Date(290362812406),"Urls":["http://zhoufoxcn.blog.51cto.com","http://blog.youkuaiyun.com/zhoufoxcn"],"Priority":1},长度:198  
  8. 使用Linq to JSON反序列化后的结果:["http://zhoufoxcn.blog.51cto.com","http://blog.youkuaiyun.com/zhoufoxcn"]  

总结:通过上面的例子大家可以看出Newtonsoft类库提供的JSON序列化和反序列的方式更加灵活,在实际开发中周公也一直使用Newtonsoft作为JSON序列化和反序列化的不二选择。

周公
2011-03-16


Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法 阅读详情

相关推荐

IMDb影评数据集:从下载到情感分析实战指南

本文提供了IMDb影评数据集从下载、探索到情感分析建模的完整实战指南。详细介绍了数据预处理、TF-IDF向量化方法,并对比了逻辑回归、随机森林、SVM及LSTM深度学习模型在情感分析任务上的应用与效果评估,帮助读者系统掌握自然语言处理的核心流程。

weixin_29052717的博客 448

Newtonsoft.Json支持.net 2.0/3.5/4.0/4.5多个版本

Newtonsoft.Json 各个版本dll Newtonsoft.Json最新版本

奋斗的蜗牛 4304

从零搭建openEuler ARM64开发测试环境:手把手教你用libvirt+KVM配置虚拟机(含VNC远程安装)

本文详细介绍了如何在ARM64平台上从零搭建openEuler开发测试环境,涵盖libvirt和KVM配置虚拟机的完整流程,包括环境准备、存储配置、网络优化、XML配置详解以及VNC远程安装。特别针对华为欧拉(openEuler)系统进行了优化,帮助开发者快速构建高效的ARM架构虚拟化环境。

weixin_30545945的博客 586

C# Net 通用json转Object(对象)

Net 通用json转Object(对象)

beautifull001的博客 3717

antiSMASH安装与使用

antiSMASH本地安装 简要: antiSMASH的本地安装需要安装很多的依赖包,本文章使用conda辅助安装 参考: 官方:https://docs.antismash.secondarymetabolites.org/install/ 文章:http://blog.sciencenet.cn/blog-3416913-1240614.html 依赖包下载 conda install -y diamond=0.8.36 conda install -y fasttree=2.1.9 conda ins

Curry_chenhu的博客 7222

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9496

Newtonsoft.Json

Newtonsoft.Json 是一个流行的高效的,由第三方提供的 .net 下的 json 框架。 其具备以下功能: 1、.net objects 与 JSON 之间的转换。 2、LINQN 转化为 JSON 对象。 3、JSON 与 XML之间的转换。 支持以下 .net 版本: .NET 2, .NET 3.5, .NET 4, .NET 4.5, Silverlight,

C_C_L的专栏 909

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1075

.NET和JSON

JSON(JavaScript Object Notation)已经成为了现在大多数程序间数据交换的存储格式,在很多地方取代了XML文件的位置。JSON实际就是JavaScript的对象数组。 .NET操作JSON的方法,基本上可以分为两种:官方和第三方。官方直到.NET Framework 3.5才对JSON有支持,如果想在之前的.NET Framework版本中使用JSON的话,那就...

228

调用魔搭API出现Please bind your Alibaba Cloud account before use的解决方案

本文主要介绍了调用魔搭API出现Please bind your Alibaba Cloud account before use解决方案,希望能对使用大模型的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 3万+

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

在 NET使用JSON作为数据交换格式

在 NET使用JSON作为数据交换格式

ytfghytf的博客 136

YOLOv9改进,YOLOv9添加CBAM注意力机制

CBAM是一个简单而有效的注意力模块,用于前馈卷积神经网络。给定一个中间特征图,我们的模块按顺序推断两个独立维度(通道和空间)的注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。由于 CBAM 是一个轻量级的通用模块,因此它可以无缝集成到任何 CNN 架构中,开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。论文链接:(CBAM论文)

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 856

【转】在.NET使用JSON作为数据交换格式

我们知道在.NET中我们有多种对象序列化的方式,如XML方式序列化、Binary序列化,其中XML序列化是一种比较通用的在各语言之间传递数据的方式。除了这两种序列化方式之外,在.NET中还可以使用JSON序列化。JSON(JavaScript Object Notation)是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XM...

abdqcpruwwhyl4931的博客 87

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[转]在.NET使用JSON作为数据交换格式

[转]在.NET使用JSON作为数据交换格式 http://blog.csdn.net/zhoufoxcn/article/details/6254657 .NET的JSON库 JSON.NET <!-- #favor_form {width:200px} #favor_form p {color:#666} #favor_form form {height:60px

keenweiwei的专栏 1098

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 强大的正则表达式---平衡组
下一篇: sql中导入*.csv格式文件
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值