将表示图像的byte []返回为JSON?

时间:2012-02-22 17:35:25

标签: javascript json image model-view-controller

我正在创建一个对象服务器端,它具有表示客户端对象所需的所有数据。我希望我的客户端对象拥有的一个属性是它的图标。

目前,我有以下代码。它尚未运行,我只想与S.O讨论一些事情:

public class ComponentDiagramPolygonChild
{
    IconServicesSoapClient IconServicesProxy = new IconServicesSoapClient("IconServicesSoap");

    public string Name { get; set; }
    public byte[] Icon { get; set; }

    public ComponentDiagramPolygonChild(PlanViewComponent planViewComponent)
    {
        Name = planViewComponent.Name;
        //TODO: Can icon ever return null here?
        Icon = IconServicesProxy.GetIconByID(planViewComponent.Icon).Image;
        planViewComponent.
    }
}

在我看来,我有两个选择:

  • 将Icon的ID存储为属性而不是byte []。
  • 将图标存储为字节[]。

如果我使用以前的建议,我将需要通过向服务器传递图标的ID来到服务器并请求图像数据。我相信这将是一种更简单的方法 - 我只会返回一个包含图像的内存流,并将该流加载到所需的位置。这方面的负面影响是服务器上的多次点击,这似乎是完全没必要的。

如果我使用后一个建议,我将通过网络传递(显着?)更大量的数据。我不确定字节数组是否能够正确地进行JSON化。我不确定如何获取jsonized byte []并将其转换为图像数据。

有没有人有这种情况的经验?我应该怎么解决这个问题?感谢。

编辑:做了一些阅读之后,看起来前选项是我最好的选择。

1 个答案:

答案 0 :(得分:2)

我认为从技术和编程的角度来看,传回数据图像会很酷。

你可以使用base64编码的图像版本,大多数现代浏览器都会支持它。您也可以使用HTML5画布对象执行此操作。 Documentation is available on the MDN

但是,从实际的角度来看,最易维护的解决方案是使用ID并让它发出单独的HTTP请求。几乎不需要每个浏览器都支持HTML 5,并且您可以重用现有的图像传送系统。

如果您的服务器已经过调整,那么可以为图像提供额外的HTTP请求,如果您正在执行大量这些图像,那么服务器上的CPU负载将会大大减少。