我正在编写一个Web API,返回一个带有字节数组属性的对象,在控制器中类似于这样:
...
car.name=Cruze;
car.Image=[123,145,10,...] // image data as byte[]
return Ok(car);
在用户界面上,我可以看到返回的汽车对象,但是
car.Image
属性被转换为Base64String
。我不确定为什么会发生这种情况。如何确保将car.Image
作为byte[]
发送到客户端?谢谢任何帮助!我正在编写一个Web API,返回一个带有字节数组属性的对象,在控制器中类似于这样:
...
car.name=Cruze;
car.Image=[123,145,10,...] // image data as byte[]
return Ok(car);
car.Image
属性被转换为Base64String
。我不确定为什么会发生这种情况。如何确保将car.Image
作为byte[]
发送到客户端?谢谢任何帮助!Web API通信是通过HTTP进行的。HTTP不知道任何关于byte[]
的信息。因为你的byte[]
是C#的一部分,而HTTP也不知道任何关于C#的信息。
所以它被正确地序列化为Base64String
(这确实是最好的做法),你的客户端需要将Base64解码为字节数组以进行进一步处理。
您的服务器和客户端之间的所有通信都必须进行序列化。所以在其他所有内容中,您的字节数组将被序列化。在这种情况下使用的标准序列化是 Base64String
。
实际上,如果您想在网站上使用您的图像,则Base64String
只是让这变得更简单。您只需在字符串开头添加 data:image/jpeg;base64,
并在您通常使用图像URL的任何位置使用它。将 jpeg
更改为您的图像类型。例如:
HTML:
<img src="data:image/jpeg;base64,..." />
JavaScript:
img.src = "data:image/jpeg;base64,...";
URL("data:image/jpeg;base64,...")
如果您想使用HTML5的功能编辑图像,也可以将其加载到画布中。
如果您使用的是浏览器以外的客户端,现在有越来越多的库可以在任何编程框架中转换Base64String
和图像,所以只需为您的框架寻找一个即可。
如果您想将字节数组用于其他用途,可以轻松地将Base64String
解码回字节数组。
Base64String
序列化方式,则可以手动以任何您想要的方式进行序列化。然后,您会意识到很难超越Base64String
序列化的效率。您说它增加了33%,试着超越它。这是标准二进制序列化的原因。 - Racil Hilan