2010-05-21 19 views
2

將位圖數據編碼爲JSON以便在Web服務中返回是否可能或合理?JSON位圖數據

更新:是的,這比我想象的更好。餘由.NET複合對象的圖像的組合與圖像數據一起

公共類AllThumbnails 公共imgAllThumbs作爲字符串 公共位置()作爲Drawing.Rectangle 末級

和通過jQuery AJAX訪問它正是如此:

$.ajax({ 
    type: "POST", 
    url: "WebService.asmx/makeAllThumbnailsImage", 
    data: "{DocumentNumber : \"" + DocumentNumber + "\"} ", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (response) { 
     var adl = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d; 

     var data = Base64.decode(adl.imgAllThumbs); 
     $('#output').append("<p><strong>" + data.length + "</strong></p>"); 
     $('#output').append("<p><strong><i>" + adl.positions.length + "<i></strong></p>"); 

    }, 
    failure: function (msg) { 
     $('#output').text(msg); 
    } 
}); 

我也紛紛加大對我的web.config的值,因爲我的圖像數據是超越標準jsonSerialization緩衝:

 
    <system.web.extensions> 
    <scripting> 
     <webServices> 
     <jsonSerialization maxJsonLength="262144"> 
     </jsonSerialization> 
     </webServices> 
    </scripting> 
    </system.web.extensions> 

謝謝你們的幫助。

+0

對不起 - 應該說。我使用C#.NET和Javascript和jQuery。 – 2010-05-21 02:14:35

+0

這是沒有問題的。您只需編輯您的帖子,然後根據需要添加/刪除標籤即可。我會爲你添加它們,因爲這是一箇舊帖子。 – jlafay 2012-01-19 15:08:22

回答

8

位圖是二進制數據。 JSON將被表示爲字符數據。所以你需要將二進制數據轉換成字符數據,反之亦然,而不會丟失信息。一個常用的編碼是Base64。目前還不清楚你的目標是哪種編程語言,所以我不能給出更詳細的答案,但幾乎所有自我推崇的語言都有一個內置的Base64編碼器或可以做到這一點的第三方庫。 PHP例如有base64_encode()base64_decode()。 Java有Apache Commons CodecBase64。對於JavaScript,有this example。等等。

2

聽起來像Binary JSON

二進制JSON,是一個類似JSON的二進制編碼序列化的 文件。像JSON一樣,BSON支持將文檔 和數組嵌入到其他文檔和數組中。 BSON還有 包含的擴展允許表示不屬於JSON規範的數據類型 。例如,BSON有一個日期類型 和一個BinData類型。

BSON可以與二進制交換格式比較,如協議 緩衝區。 BSON比Protocol Buffers更「無模式」,它可以在靈活性上給它一個優勢,但在空間效率方面也有一個小缺陷(BSON已在串行化數據中的字段名稱 )。