2017-06-23 47 views
1

我想通過JavaScript將一個字節數組傳遞給我的WebMethod。 問題是我的WebMethod返回消息「測試表單僅適用於原始方法作爲參數。」如何在WebMethod中接收非原始數據?

當我將數據類型更改爲字符串或任何其他類型的原始變量時,WebMethod接受它。

我正在將一個對象轉換爲一個byte [],使用MessagePack命名爲msgpackEnvio(轉換本身發生的很好),然後發送到WebService。

這裏是我的請求的WebService使用jQuery

$.ajax({ 
        beforeSend: function (request) { 
         request.setRequestHeader("Content-Type", "application/json"); 
        }, 
        processData: false, 
        dataType: "json", 
        url: url, 
        data: msgpackEnvio, 
        type: "POST", 
        error: function (data) { 
         $('#upload-load').hide(); 
         $('.bt-enviar-excel').removeAttr('disabled', 'disabled'); 
         var msg = document.getElementsByClassName('msg')[0]; 
         msg.style.color = 'red'; 
         msg.innerHTML = 'Erro interno servidor!'; 
        }, 
        success: //some code 

事實上,上面的代碼不會在所有問題,我的問題是在web服務,以及如何使它得到一個數組或者是一個對象。

而且這裏是我的WebMethod,應該是能夠接收一個byte []

[WebMethod] 
public string TestMessagePack(byte[] name) 
{   
    //my code 

    return "Finish"; 
} 

回答

0

您可以使用base64編碼和解碼發送字節數組作爲字符串。除此之外,你可能想要使用post請求和JSON序列化/反序列化。對於複雜的C#對象和JavaScript對象之間的所有轉換,這不會是一個通用的大小適合所有的轉換,這就是爲什麼只允許基本參數的原因,所以對於非原始的東西,您需要一個轉換層。這通常意味着某種形式的字符串序列化和反序列化。

+0

我試了一下,但我想解決的問題正是這一個。當我讀取一些對象時,我的json變得如此之大,以至於連接到WebService需要很長時間,甚至有時會出現時間連接錯誤。 我真的需要改變WebService方法來接收非原始語言 –

+0

javascript如何知道構建C#可以理解的非原始對象?複雜的對象將依賴於他們的語言和環境,因爲他們在引擎蓋下看起來像是什麼樣子,所以爲了彌補這種差距,序列化發揮了作用。複雜對象需要以某種方式被序列化爲一個字符串(這兩個層都知道如何處理的基本類型),以便將字符串發送並反序列化爲複雜對象以接收。 JSON/XML/etc和base64在這裏是你的朋友。 –

+0

一些更簡單的類型將能夠自動序列化和反序列化,儘管這不是我依賴的東西,如果它們變得更復雜,則需要移至諸如json或xml之類的東西。這個錯誤消息來自哪裏?它不在引用的代碼中,也不是標準的錯誤消息。 –

相關問題