2012-02-22 53 views
2

我正在創建一個對象服務器端,它具有表示對象客戶端所需的所有數據。我希望我的客戶對象擁有的其中一個屬性是其圖標。將表示圖像的byte []返回爲JSON?

目前,我有以下代碼。它尚未跑了,我只是想討論與SO一些事情:

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. 
    } 
} 

在我看來,我有兩種方法可供選擇:

  • 商店圖標作爲的ID屬性而不是byte []。
  • 將圖標存儲爲字節[]。

如果我使用前面的建議,我需要去服務器並通過傳遞給服務器圖標的ID來請求圖像數據。我相信這將是一個更簡單的方法 - 我只會返回一個內存流,容納圖像並將該流加載到所需的位置。這個消極方面是在服務器上多次點擊,看起來完全沒有必要。

如果我使用後面的建議,我將在整個網絡中傳遞(顯着?)更大量的數據。我不確定字節數組是否可以正確JSON化。我不確定如何獲取jsonized byte []並將其轉換爲圖像數據。

有沒有人有這種情況的任何經驗?我應該如何解決這個問題?謝謝。

編輯:在做了一些閱讀後,它看起來像前選項是我最好的選擇。

回答

2

我認爲從技術和編程的角度來看,將數據圖像傳回來會很酷。

你可以用圖像的base64編碼版本來做到這一點,大多數現代瀏覽器將支持這一點。您也可以使用HTML5畫布對象來做到這一點。 Documentation is available on the MDN

但是,從實際的角度來看,最可維護的解決方案是使用一個ID並讓它發出一個單獨的HTTP請求。幾乎所有使用的瀏覽器都不支持HTML 5,您可以重複使用現有的圖像傳輸系統。

如果您的服務器已經過調整,那麼可以爲映像添加額外的HTTP請求,如果您正在執行大量這些映像,則服務器上的CPU負載將會減少很多。

+0

我閱讀了關於畫布對象的HTML5文檔 - 這激起了我的興趣。我已經將這些圖像加載到畫布上 - 減少了服務器上的點擊量,同時充分利用畫布聽起來很理想。它看起來像一個'CanvasPixelArray'對象作爲數據。這種類型是否容易轉換爲字節數組? – 2012-02-22 18:14:28

+0

對不起,我對這個幫助不夠了解。您可以在SO上的新問題中獲得一些具體幫助。 – Jordan 2012-02-22 20:17:19