草庐IT

Marshal3

全部标签

go - 为什么 json.Marshal 和 json.Unmarshal 有不同的签名

funcMarshal(vinterface{})([]byte,error)funcUnmarshal(data[]byte,vinterface{})error注意Marshal接受一个接口(interface)并返回一个[]byte作为输出,而Unmarshal接受一个[]byte并将输出直接写入输入参数数据是什么让设计与众不同相关问题:我认为使用输入参数可以在内存中保存一次(函数返回需要一个副本),golang中的每个赋值都是一个复制操作,所以看起来Unmarshal可以保存一个副本,但Marshal不能。所以我很困惑...... 最佳答案

go - 编码(marshal)嵌入式结构

我一直在研究嵌入的工作原理。http://play.golang.org/p/oHOim4G1-l当我编码Child结构时,它编码为{}。为什么要这样编码? 最佳答案 你的JSON字典是空的,因为结构的任何字段(或结构中嵌入的任何结构)都不是exported.如果您将字段名称更改为以大写字母开头,那么encoding/json模块将能够看到它们。当然,由于您还有名为Name和Value的方法,因此您需要将它们命名为其他名称以避免冲突。 关于go-编码(marshal)嵌入式结构,我们在S

xml - 戈朗 : write marshal xml to file

我有一个编码XML的字节数组,如果我使用os库将它写入文件:fh,_:=os.OpenFile("filename",os.O_CREATE,0644)_,err:=fh.Write(XMLByteArray)我在文件末尾看到一堆垃圾,好像是写错了一样:on>如果我像这样使用io/ioutil库编写它:err=ioutil.WriteFile("filename",XMLByteArray,0644)iferr!=nil{log.Fatal(err)}我得到正确的XML:这是我真的不明白的部分。该文件是动态路径生成的结果,是IntelliJ的配置。如果我使用os.Write()然后正确

json - 防止在编码(marshal)处按字母顺序排列 json

我想防止在Marshal中按字母顺序重新排序。我的脚本如下。{"key3":"value3","key2":"value2","key1":"value1"}重新排序为{"key1":"value1","key2":"value2","key3":"value3"}由编码(marshal)。我以为this可能是关闭问题。但我无法解决我的问题。有办法解决吗?脚本packagemainimport("encoding/json""fmt")funcmain(){obj:=`{"key3":"value3","key2":"value2","key1":"value1"}`varomap[s

json - Go - 在 json.Marshal 中自动将字符串值转换为 int 值

我有[]map[string]string。存在的值可以是整数(以字符串形式)“1”。我想自动转换为int值,如1。例子:map1:=[]map[string]string{{"k1":"1","k2":"somevalue"},{"k1":"-12","k2":"somevalue"},}我想像这样使用json.marshal将它转换为json{{"k1":1,"k2":"somevalue"}{"k1":-12,"k1":"somevalue"}}我该如何实现。 最佳答案 您可以创建自定义类型,并在该类型上实现json.Mars

Java : unable to marshal type "entities.Person" as an element because

在我的网络服务(使用RestEasy)项目中,我依赖于一个jar。我从那个jar中使用了一个java类:Person。我的问题是我需要将一个Person实例序列化为XML,但我收到以下错误:unabletomarshaltype"entities.Person"asanelementbecauseitismissingan@XmlRootElementannotation但是,我无法更改Person类以添加注释@XmlRootElement(它是第三方jar)。是否有任何其他方法(方法、库...)可以在不注释Person类的情况下将Person实例编码为XML?顺便说一句,这是我使用的

java - 编码(marshal) java.util.Map<String,String>

我的restfulJSON服务的下一个问题。importjava.util.Map;importjavax.xml.bind.annotation.XmlAccessType;importjavax.xml.bind.annotation.XmlAccessorType;importjavax.xml.bind.annotation.XmlRootElement;/***@authorMartinBurchard**/@XmlRootElement(name="user")@XmlAccessorType(XmlAccessType.FIELD)publicclassUser{priv

c# - EnumJobs 返回与 Marshal.SizeOF 不同的 JOB_INFO_1 大小

我正在从托管代码(C#)调用Win32函数EnumJobs(http://msdn.microsoft.com/en-us/library/windows/desktop/dd162625(v=vs.85).aspx)。[DllImport("Winspool.drv",SetLastError=true,EntryPoint="EnumJobsA")]publicstaticexternboolEnumJobs(IntPtrhPrinter,//handletoprinterobjectUInt32FirstJob,//indexoffirstjobUInt32NoJobs,//nu

c++ - 跨进程 COM 编码(marshal)拆收器 : reduce number of copies for large arrays

作为简化的案例:我需要通过现有的COM接口(interface)将VARIANT传输到另一个进程。我目前使用MIDL生成的编码器。实际传输是针对许多值的,是时间关键过程的一部分,并且可能涉及大字符串或safearray(几MB),因此复制的数量似乎是相关的。由于接收方需要“保留”函数调用之外的数据,因此编码(marshal)拆收器至少需要制作一份拷贝。然而,我能想到的所有签名都包括两份:SetValue([in]VARIANT)GetValue([out]VARIANT*)//calledbyreceiver在这两种情况下,根据我的理解,编码器制作了一个跨进程拷贝,但确实被编码器销毁了

c# - 在结构中编码(marshal) IntPtr[] 会导致 midiStream 函数出现错误,但将数组展开到一堆字段是可行的

我正在尝试使用C#中的Windows多媒体MIDI函数。具体来说:MMRESULTmidiOutPrepareHeader(HMIDIOUThmo,LPMIDIHDRlpMidiOutHdr,UINTcbMidiOutHdr);MMRESULTmidiOutUnprepareHeader(HMIDIOUThmo,LPMIDIHDRlpMidiOutHdr,UINTcbMidiOutHdr);MMRESULTmidiStreamOut(HMIDISTRMhMidiStream,LPMIDIHDRlpMidiHdr,UINTcbMidiHdr);MMRESULTmidiStreamRest