|
|
现在做一个项目,完全使用XSD,如果采用Image 默认的byte[] 方式输出成XML ,就会很崩溃,会输出如下:
<Image>
<byte>-1</byte>
<byte>-12</byte>
<byte>158</byte>
<byte>-2</byte>
<byte>222</byte>
..........................
<byte>-1</byte>
</Image>
一张 290× 200 的图片,Jpeg 格式,大约需要输出14万行的byte 数组。图片还不到20K,但输出的字符串却大约有600K。这样的方案于情于理是完全说不通的。
解决办法:
采用目前比较流行的Base64 方式,将byte[] 数组转换为字符串,这样就减少了输出,同时也不受机器Code 的影响。
转换代码:
Image --> Base64String
Base64String --> Image
发现在XSD 中,节点为Image 类型,转换出的cs 代码中却是 sbyte[] 类型的。
查阅MSDN ,告知sbyte 和 byte 需要显示转换。
由查阅网上不少文章,发现大家碰到这个转换,大多都采用 for 循环解决。-_-!
(了解至此我异常崩溃,由于要转换图片,数组的Lenght大约有20万条)。
不过有幸翻到了一个老外写的转换代码,非常好使,两行搞定,遂共享给大家: