Javascript 如何在WebMethod中接收非原始数据?

Javascript 如何在WebMethod中接收非原始数据?,javascript,c#,json,web-services,webmethod,Javascript,C#,Json,Web Services,Webmethod,我试图通过JavaScript将字节数组传递给我的WebMethod。 问题是,我的WebMethod返回的消息是“测试表单仅可作为参数用于基本方法” 当我将数据类型更改为字符串或任何其他类型的基元变量时,WebMethod将继续接受它 我正在使用MessagePack将一个对象转换成一个名为msgpackEnvio的字节[](转换本身进行得很好),然后发送到WebService 下面是我使用jquery对WebService的请求 $.ajax({ be

我试图通过JavaScript将字节数组传递给我的WebMethod。 问题是,我的WebMethod返回的消息是“测试表单仅可作为参数用于基本方法”

当我将数据类型更改为字符串或任何其他类型的基元变量时,WebMethod将继续接受它

我正在使用MessagePack将一个对象转换成一个名为msgpackEnvio的字节[](转换本身进行得很好),然后发送到WebService

下面是我使用jquery对WebService的请求

$.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
事实上,上面的代码一点也不重要,我的问题在于webService,以及如何使它接收数组或对象

这是我的WebMethod,它应该能够接收一个字节[]

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

    return "Finish";
}

可以使用base64编码和解码将字节数组作为字符串发送。除此之外,您可能还需要使用post请求和JSON序列化/反序列化。复杂的C#对象和javascript对象之间不会有通用的一刀切的转换,这就是为什么只允许原始参数,所以对于非原始的东西,您需要一个翻译层。这通常意味着某种形式的字符串序列化和反序列化。

您可以使用base64编码和解码将字节数组作为字符串发送。除此之外,您可能还需要使用post请求和JSON序列化/反序列化。复杂的C#对象和javascript对象之间不会有通用的一刀切的转换,这就是为什么只允许原始参数,所以对于非原始的东西,您需要一个翻译层。这通常意味着某种形式的字符串序列化和反序列化。

我尝试过,但我想解决的问题正是这个。当我阅读一些对象时,我的json变得非常大,以至于与WebService的连接需要很长时间,甚至有时会出现时间连接错误。我真的需要更改WebService方法以接收非原语javascript如何构建C#能够理解的非原语对象?复杂对象将依赖于它们的语言和环境,它们在引擎盖下的实际外观,因此,为了弥合这一差距,序列化开始发挥作用。复杂对象需要以某种方式序列化为字符串(两个层都知道如何处理的基本类型),以便从字符串发送和反序列化到复杂对象中进行接收。JSON/XML/etc和base64是您在这里的朋友。一些简单的类型将能够自动序列化和反序列化,尽管这不是我所依赖的,如果它们变得更复杂,您将需要转向JSON或XML之类的类型。此错误消息来自何处?它不在引用的代码中,也不是标准的错误消息。我尝试过它,但我想解决的问题正是这个。当我阅读一些对象时,我的json变得非常大,以至于与WebService的连接需要很长时间,甚至有时会出现时间连接错误。我真的需要更改WebService方法以接收非原语javascript如何构建C#能够理解的非原语对象?复杂对象将依赖于它们的语言和环境,它们在引擎盖下的实际外观,因此,为了弥合这一差距,序列化开始发挥作用。复杂对象需要以某种方式序列化为字符串(两个层都知道如何处理的基本类型),以便从字符串发送和反序列化到复杂对象中进行接收。JSON/XML/etc和base64是您在这里的朋友。一些简单的类型将能够自动序列化和反序列化,尽管这不是我所依赖的,如果它们变得更复杂,您将需要转向JSON或XML之类的类型。此错误消息来自何处?它不在引用的代码中,也不是标准错误消息。