序列化

DRF一对多序列化和反序列化

十年热恋 提交于 2020-02-26 14:15:47
models.py # 商品分类 class Category(models.Model): name = models.CharField(max_length=32) # 商品 class Goods(models.Model): name = models.CharField(max_length=32) price = models.DecimalField(max_digits=9,decimal_places=2) cate = models.ForeignKey(to='Category',on_delete=models.CASCADE) urls.py from django.urls import path,include from . import views urlpatterns = [ path('goods/',views.GoodsView.as_view()), ] seralizers.py # 序列化 class GoodsSerializer(serializers.ModelSerializer): # 如果想查出分类名称 CharField(source='<本model中的外键>.<外键指向的model的相应属性>') cate_name = serializers.CharField(source='cate.name') class

迟来的Json反序列化

牧云@^-^@ 提交于 2020-02-26 02:30:59
  源码发布 搞了一个下午,终于搞定了这个号称中国的github...以后源码直接在这里发布了(github实在用不来,英文实在太烂了) https://code.csdn.net/jy02305022/blqw-json   相关回顾 一种简单,轻量,灵活的C#对象转Json对象的方案 一种简单,轻量,灵活的C#对象转Json对象的方案(续)   废话 自从上次发表了Json序列化的方案之后,已经整整一个月了。 原本是想序列化写完马上开始写反序列化的,但是来看了大家的回复之后得到了很多启示,所以这一个月直接在做优化的工作(当然还有带BB)。 我发现博客园真是个好地方,以前在QQ空间,点点,微博发表技术文章的时候根本没有人回复,了不起有几个转载的。。。 在这里大家一起参与讨论,才能获得更多的启示和发现,才能更好的提高自己!   blqw.Json方案整体结构 blqw.Json ├─ JsonBuilder //用于将C#转换为Json字符串 ├─ QuickJsonBuilder //快速的将任意C#对象转换为Json字符串,继承自JsonBuilder ├─ UnsafeStringWriter //程序集可用,未公开对象.以非安全方式访问指针操作字符串直接写入内存,以提高字符串拼接效率 ├─ JsonParser //用于将Json字符串转换为C#对象 └─

Beetle在TCP通讯中使用二进制序列化对象传输

筅森魡賤 提交于 2020-02-26 02:10:00
组件发送的对象都必须实现IMessage接口,通过实现接口来描述一个对象的序列化过程;自定义读写流的好处就是可以得到更好的性能,但缺点也相对明显的就是工作量比较多.在很多应用场合下所追求的并不是性能第一,而是希望省下这些烦锁的工作,为了应付这种需要组件可以实现一个简单的消息适配器来完成这样的功能.下面通过扩展的方式来实现组件对.net二进制序列化对象转输的支持. 定义协议格式 在TCP下进行数据交互通讯首先是要制定一个通讯的应用协议,由于组件提供基于结束符和头大小描述的基础分析器,可以从这基础分析协中派生下来.似下通过一个图来描述协议的具体细节 协议描述比较简单消息头是4个字节用于存储消息的总长度,而序列化存储的数据则是总长度减去头4位. 实现具体的分析器和消息适配器 协议制定后就可以进行分析器的实现,由于采用头4字节描述大小,所以分析器从HeadSizeOfPackage基础类派生下载重写相关方法即可;完整实现代码如下: public class BinaryFormatterPackage:HeadSizeOfPackage { public BinaryFormatterPackage() { } public BinaryFormatterPackage(TcpChannel channel) : base(channel) { } public override

Beetle在Tcp通讯中使用Protobuf

前提是你 提交于 2020-02-26 02:09:02
  Protobuf是google制定的一种对象序列化格式,而在.net下的实现有 protobuf - net. 而protobuf - net在序列化方面有着出色的性能,效率是.net二进制序列化几倍,而序列化后所占的空间也少于.net二进制序列化;除了以上两个优势外Protobuf有着一个更大的优势就是和其他平台交互的兼容性,在现有大部分流行的语言平台中基本都有Protobuf的实现.因此采用protobuf进行对象序列化是个不错的选择.接下来详细讲解Beetle实现对protobuf - net支持. 定义协议格式 为了保证TCP数据流正确处理,首先要做的事情还是要制定一个处理协议,来保证数据处理的有效性. 数据包同样也是两部分组件,头描述消息总长度,消息体是主内容.由于Protobuf-net序列化的数据交不包括消息类型,所以在协议中必须包括类型名称用于提供给对方实始化对应的类型过行反序列化操作. 实现具体的分析器和消息适配器 协议制定后就可以进行分析器的实现,由于采用头4字节描述大小,所以分析器从HeadSizeOfPackage基础类派生下载重写相关方法即可;完整实现代码如下: using System; using System.Collections.Generic; using System.Text; using Beetle; namespace

java序列化/反序列化之xml、protobuf、protostuff 的比较与使用例子

若如初见. 提交于 2020-02-26 02:08:30
目录 1、背景 2、测试   2.1、环境   2.2、工具   2.3、说明   2.4、结果   2.5、结论 3、xml简单教程   3.1、准备   3.2、代码  4、protobuf简单教程   4.1、快速入门     1、下载.exe编译器     2、编写.proto文件     3、利用编译器编译.proto文件生成javabean     4、引用jar包     5、直接使用javabean自带的序列化、反序列化、提取属性等方法 5、protostuff简单教程   5.1、快速入门     1、引用jar包     2、直接使用相关序列化、反序列化语法 6、protobuf与protostuff区别 protostuff是一个基于protobuf实现的序列化方法,它较于protobuf最明显的好处是,在几乎不损耗性能的情况下做到了不用我们写.proto文件来实现序列化。 1、背景 我今天要将的是google开发的开源的序列化方案protocol buffer(简称protobuf),它的好处很多,独立于语言,独立于平台,最最重要的是它的效率相当高,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。 2、测试 2.1 测试环境 xstraem版本:1.3.1 protobuf-java版本:3.0.0

protobuf java 使用 window

别说谁变了你拦得住时间么 提交于 2020-02-26 02:07:28
1.到http://code.google.com/p/protobuf/downloads/list ,选择其中的win版本下载,我选择的是protoc-2.4.1-win32.zip 2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同) 然后就开始开发了。 步骤: 1.用记事本编写一个.proto文件: }如:我编写的是test.proto package protobuf; option java_package = "com.sq.protobuf"; option java_outer_classname = "FirstProtobuf"; message testBuf { required int32 ID = 1; required string Url = 2; } 将其放在与刚解压的protoc.exe同级目录中。 2. 在cmd中,到protoc-2.4.1-win32文件夹下, 执行 E:\protoc-2.4.1-win32>protoc.exe --java_out=./ test.proto 则可以找到的一个生成的FirstProtobuf.java文件。 3. 在MyEclipse中新建一个java project,建立包com.sq.protobuf

Java序列化的状态

大憨熊 提交于 2020-02-26 01:56:44
Java序列化的状态 关键要点 Java序列化在很多库中引入了安全漏洞。 对序列化进行模块化处于开放讨论状态。 如果序列化能够成为模块,开发人员将能够将其从***表面上移除。 移除其他模块可以消除它们所带来的风险。 插桩提供了一种编织安全控制的方法,提供现代化的防御机制。 多年来,Java的序列化功能饱受 安全漏洞 和zero-day***,为此赢得了“ 持续奉献的礼物 ”和“ 第四个不可饶恕的诅咒 ”的绰号。 作为回应,OpenJDK贡献者团队讨论了一些用于限制序列化访问的方法,例如将其 提取到可以被移除的jigsaw模块中 ,让***无法***那些不存在的东西。 一些文章(例如“ 序列化必须死 ”)提出了这样的建议,将有助于防止 某些流行软件(如VCenter 6.5)的漏洞被利用 。 什么是序列化? 自从1997年发布 JDK 1.1 以来,序列化已经存在于Java平台中。 它用于在套接字之间共享对象表示,或者将对象及其状态保存起来以供将来使用(反序列化)。 在JDK 10及更低版本中,序列化作为java.base包和java.io.Serializable方法的一部分存在于所有的系统中。 GeeksForGeeks对 序列化的工作原理 进行了详细的描述。 有关更多如何使用序列化的代码示例,可以参看Baeldung对 Java序列化的介绍 。 序列化的挑战和局限

Newtonsoft.Json序列化和反序列

老子叫甜甜 提交于 2020-02-25 11:51:40
这里下载:http://www.newtonsoft.com/products/json/ 安装: 1 . 解压下载文件,得到Newtonsoft.Json.dll 2.在项目中添加引用.. 序列化和反序列在.net项目中: Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99M; product.Sizes = new string[] { "Small", "Medium", "Large" }; string output = javascriptConvert.SerializeObject(product); //{ // "Name": "Apple", // "Expiry": new Date(1230422400000), // "Price": 3.99, // "Sizes": [ // "Small", // "Medium", // "Large" // ] //} Product deserializedProduct = (Product)javascriptConvert.DeserializeObject(output, typeof(Product));

day17--模块之time、calendar、datetime、sys、os、os.path、json、pickle、random

风格不统一 提交于 2020-02-25 07:24:29
一、时间模块(time,calendar,datetime)    在Python中,通常有这几种方式来表示时间:   时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。   格式化的时间字符串(Format String)   结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) time 模块,主要知道如下几个功能: 时间戳(timestamp):time.time() 延迟线程的运行:time.sleep(secs) (指定时间戳下的)当前时区时间:time.localtime([secs]) (指定时间戳下的)格林威治时间:time.gmtime([secs]) (指定时间元组下的)格式化时间:time.strftime(fmt[,tupletime]) import time print(time.time()) print('暂停开始') sec = 1 time.sleep(sec) # 延迟线程的运行。(例如延迟邮件发送) print('暂停结束') print(time.time()) # 重点: # 时间戳 --》

JAVA关键字整理

£可爱£侵袭症+ 提交于 2020-02-24 23:26:11
assert: https://blog.csdn.net/jeikerxiao/article/details/82262487 const: 可以忽略不计,几乎没什么用,网上查了一下说是和final一个作用 default: https://blog.csdn.net/qq_35835624/article/details/80196932 enum枚举: https://blog.csdn.net/echizao1839/article/details/80890490 native: https://blog.csdn.net/funneies/article/details/8949660 strictfp: https://www.breakyizhan.com/java/4099.html goto:这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。 transient:将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。 https://baijiahao.baidu.com/s?id=1636557218432721275&wfr=spider&for=pc volatile:修饰后使访问直接去内存中获取成员变量,实现了内存可见性; 来源: CSDN 作者: 仰望月亮一刻钟 链接: