marshal

解决go中json.Marshal报错json: unsupported type: chan的问题

こ雲淡風輕ζ 提交于 2020-03-09 12:45:11
1.json.Marshal不能导出chan类型、函数类型、 complex 类型,如果不加处理直接导出会报错导致导出失败 报错内容大概如下: json: unsupported type: chan int 2.解决:让json.Marshal过滤掉不能导出的类型 使用tag 如: `json:"-"` type User struct { UserId int `json:"user_id"` UserChan chan int `json:"-"` } 来源: oschina 链接: https://my.oschina.net/u/3223370/blog/3190431

C#调用C++ 类型转换

ⅰ亾dé卋堺 提交于 2020-02-26 11:48:29
Marshal 类 msdn: https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.interopservices.marshal?redirectedfrom=MSDN&view=netframework-4.8#methods csdn: https://blog.csdn.net/u011555996/article/details/103916426 常用转换: 字符串: // 创建一个托管字符串 string managedString = "I am a managed String"; // 将托管字符串复制到非托管内存 IntPtr stringPointer = (IntPtr)Marshal.StringToHGlobalAnsi(managedString); // 将非托管内存复制到托管字符串 string retrievedString = Marshal.PtrToStringAnsi(stringPointer); // 释放非托管内存 Marshal.FreeHGlobal(stringPointer); //在释放之前,还可以继续访问 string retrievedString2 = Marshal.PtrToStringAnsi(stringPointer); Task

Go语言结构体转json的坑

一笑奈何 提交于 2020-02-12 15:39:24
Go语言结构体转json的坑 标签(空格分隔): go json.Marshal() JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。 针对JSON的输出,我们在定义struct tag的时候需要注意的几点是: - 字段的tag是"-",那么这个字段不会输出到JSON - tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中 - tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中 - 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串 代码示例 package main import ( "encoding/json" "fmt" ) func main() { type UserInfo struct { Id int Name string Address string } type Comiket struct { id int title string } type Test struct { Id int `json:"-"` Content string `json:"content

C# 读取IE缓存文件

淺唱寂寞╮ 提交于 2020-02-12 00:24:15
http://topic.csdn.net/u/20091102/13/a35034b7-cc18-4aa7-90e3-941604152bb3.html 背景:大家知道,在我们访问一个网站的时候。系统会把这个网站上的图片,动画等内容全部缓存到Internet临时文件夹中。 我们可以通过 <Drives>:\Documents and Settings\<user>\Local Settings\Temporary Internet Files访问。但是可能我们都没有想到,里面的文件实际却不同于我们系统中其他的文件夹和文件的关系。 举例说明,我们在VS.net下写一个函数来返回指定文件夹中的文件夹和所有文件时,但我们把Internet临时文件夹的地址传进去时,系统只会返回一个文件,那就是desktop.ini(每个文件夹都有),还有一个隐藏的文件夹。所以这就证明了在临时文件夹中的文件并不是按照普通的文件夹与文件的方式存在的。 其实windows是把临时文件全部存在一个隐藏的文件夹中,这个文件夹是我们都看不到的,然后靠一个index.dat的索引把内容全部读出来回显给用户。 那我们怎么用程序来读取其中的内容呢? 首先要引用一个user.dll,在系统文件夹中。然后利用它其中的一些函数就可以遍历整个文件夹,并获得其中每个文件的信息。 [DllImport( " wininet.dll

一个TCP长连接设备管理后台工程(四)---jtt808协议解析

泪湿孤枕 提交于 2020-02-03 08:31:04
协议解析 从前面内容我们可以发现,808协议是一个很典型的协议格式: 固定字段+变长字段 其中固定字段用来检测一个帧格式的完整性和有效性,所以一般会包含一下内容:帧头+变长字段对应的长度+校验。由于这一段的数据格式固定,目的单一,所以处理起来比较简单。 变长字段的长度是由固定字段终端某一个子字段的值决定的,而且这部分的格式比较多变,需要灵活处理。这一字段我们通常称为Body或者Apdu。 我们首先说明变长字段的处理流程。 Body处理 正因为Body字段格式灵活,所以为了提高代码的复用性和拓展性,我们需要对Body的处理机制进行抽象,提取出一个相对通用的接口出来。 有经验的工程师都知道,一个协议格式处理,无非就是编码和解码。编码我们称之为Marshal,解码我们称之为Unmarshal。对于不同的格式,我们只需要提供不同的Marshal和Unmarshal实现即可。 从前面分析可以知道,我们现在面对的一种格式是类似于Plain的格式,这种格式没有基本的分割符,下面我们就对这种编码来实现Marshal和Unmarshal。我们将这部分逻辑定义为一个codec包 package codec func Unmarshal ( data [ ] byte , v interface { } ) ( int , error ) { } func Marshal ( v interface {

Json 编解码

最后都变了- 提交于 2020-01-31 08:02:29
JSON JSON概述 JSON数据格式 JSON序列化(编码) JSON反序列化(解码) JSON概述 1. JSON ( JavaScript Object Notation ) : 轻量级的数据交换格式 , 一种数据结构化交互的标准协议 , 比XML易于阅读和编写、易于解析和生成。 2. 主要功能 : json是客户端和服务端的交互传递数据 , 最通用的并且也是最流行的格式 有效提升网络传输效率 , 程序在网络传输时会先将数据 ( 如结构体、 map 等 ) 序列化成json字符串 , 到接收方接收到json字符串时 , 再反序列化恢复成原来的数据类型 JSON数据格式 任何数据类型都可以通过JSON来表示,如字符串、数字、对象、数组、map、结构体等。数据格式:JSON键值对 在 www.json.cn 可以在线转换和检测json字符串 { "name" : "monkey" } { "name" : "monkey" , "age" : 10 , "address" : [ "上海" , "成都" ] } [ { "name" : "monkey1" , "age" : 11 , "address" : [ "上海" , "成都" ] } , { "name" : "monkey2" , "age" : 12 , "address" : [ "北京" , "成都" ] }

Marshal.PtrToStringAnsi中文乱码

时光怂恿深爱的人放手 提交于 2020-01-28 17:47:23
Marshal.PtrToStringAnsi中文乱码 出错代码: string dec = Marshal.PtrToStringAnsi(audioOutput.psz_description);//输出 鎵0鍣?(Realtek High Definition Audio) 原因: 查看内存后知道内存编码是UTF8,Marshal不支持UTF转换,所以必须先转成Unicode再转成UTF8 解决后的代码: byte[] bytes = System.Text.Encoding.Unicode.GetBytes(Marshal.PtrToStringUni(audioOutput.psz_description));//转成UNICODE编码 string dec = System.Text.Encoding.UTF8.GetString(bytes);//再转成UTF8 string dec = Marshal.PtrToStringAnsi(audioOutput.psz_description);//输出 鎵0鍣?(Realtek High Definition Audio) 原因: 查看内存后知道内存编码是UTF8,Marshal不支持UTF转换,所以必须先转成Unicode再转成UTF8 解决后的代码: byte[] bytes = System.Text

用Castor 处理XML文档

社会主义新天地 提交于 2020-01-07 07:15:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 用Castor 处理XML文档 ——Castor可以完成Java和XML的相互转换 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 它们都可以完成Java对象到XML的转换,但是还不是那么的完善。还有XStream对JSON及XML的支持,它可以对JSON或XML的完美转换。在线博文: http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html 这里将介绍Castor来完成Java对象到xml的相互转换。它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Java对象的xml基本形态,类似于xStream的annotation,这点还是非常不错的。下面我们就来看看Castor是怎么样完成Java对象到XML之间的相互转换吧。 一、 准备工作 1、 官方资源 本示例会运用到如下依赖包(jar包): 资源及jar包下载:http:/

go笔记--json包使用

北城以北 提交于 2019-12-15 21:55:30
目录 Marshal Unmarshal 处理json对象 @ json包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系主要通过Marshal和Unmarshal函数实现 Marshal func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。 Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。 否则,Marshal函数使用下面的基于类型的默认编码格式: 布尔类型编码为json布尔类型。 浮点数、整数和Number类型的值编码为json数字类型。 字符串编码为json字符串。角括号"<"和">"会转义为"\u003c"和"\u003e"以避免某些浏览器吧json输出错误理解为HTML。基于同样的原因,"&"转义为"\u0026"。 数组和切片类型的值编码为json数组,但[]byte编码为base64编码字符串,nil切片编码为null。 结构体的值编码为json对象。每一个导出字段变成该对象的一个成员,除非: 字段的标签是"-" 字段是空值,而其标签指定了omitempty选项

go笔记--json包使用

ⅰ亾dé卋堺 提交于 2019-12-15 21:01:54
文章目录 Marshal Unmarshal 处理json对象 json包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系主要通过Marshal和Unmarshal函数实现 Marshal func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。 Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。 否则,Marshal函数使用下面的基于类型的默认编码格式: 布尔类型编码为json布尔类型。 浮点数、整数和Number类型的值编码为json数字类型。 字符串编码为json字符串。角括号"<“和”>“会转义为”\u003c"和"\u003e"以避免某些浏览器吧json输出错误理解为HTML。基于同样的原因,"&“转义为”\u0026"。 数组和切片类型的值编码为json数组,但[]byte编码为base64编码字符串,nil切片编码为null。 结构体的值编码为json对象。每一个导出字段变成该对象的一个成员,除非: 字段的标签是"-" 字段是空值,而其标签指定了omitempty选项