Javascript 从AJAX请求反序列化Webmethod中的JSON

Javascript 从AJAX请求反序列化Webmethod中的JSON,javascript,ajax,json,vb.net,json.net,Javascript,Ajax,Json,Vb.net,Json.net,我有一个内置在javascript中的JSON对象,我想将它传递到一个ajax请求到一个VB.NETWebMethod中,并对其进行反序列化。我正在使用Newtonsoft JSON对对象进行反序列化。该对象似乎已传递,但当我尝试将其反序列化为对象时,会出现以下错误:将值“myid”转换为类型“AnID.RF.MyIDProfile”时出错。 以下是我正在使用的javascript代码: function test() { var testdata; testdata = "{

我有一个内置在javascript中的JSON对象,我想将它传递到一个ajax请求到一个VB.NETWebMethod中,并对其进行反序列化。我正在使用Newtonsoft JSON对对象进行反序列化。该对象似乎已传递,但当我尝试将其反序列化为对象时,会出现以下错误:
将值“myid”转换为类型“AnID.RF.MyIDProfile”时出错。

以下是我正在使用的javascript代码:

function test() {
    var testdata;

    testdata = "{'data':{'ses':'','profile':{'myid':'myid','username':'User','firstName':'adf','lastName':'lastname','languagePreference':'en'}}}";
    $.ajax({
        type: "POST",
        url: "default.aspx/Foo",
        data: testdata,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function() {
        },
        success: function(data) {
            if (data != "") {
                alert(data.d);
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }

    })
}
以下是服务器端代码:

           <System.Web.Services.WebMethod()> _
        Public Shared Function Foo(ByVal data As Object) As String
            Dim jO As JObject = JObject.FromObject(data)
            Dim sMessage As String = "y"
            Try

                Dim results As IList(Of JToken) = jO("profile").Children().ToList()
                Dim searchResults As IList(Of RF.MyIDProfile) = New List(Of RF.MyIDProfile)()

                For Each result As JToken In results
                    Dim searchResult As RF.MyIDProfile = JsonConvert.DeserializeObject(Of RF.MyIDProfile)(result.ToString())
                    searchResults.Add(searchResult)
                Next
                Dim stest As String = jO.SelectToken("profile.myid").ToString
            Catch ex As Exception
                sMessage = "e"
            End Try


            Return sMessage
        End Function

        Namespace RF
            Public Class MyIDProfile
                Private sMYID As String
                Private sUSERName As String
                Private sPrefix As String
                Private sFirstName As String
                Private sLastName As String
                Private slanguagePreference As String

                Public Property myid() As String
                    Get
                        Return sMYID
                    End Get
                    Set(ByVal value As String)
                        sMYID = value
                    End Set
                End Property


                Public Property username() As String
                    Get
                        Return sUSERName
                    End Get
                    Set(ByVal value As String)
                        sUSERName = value
                    End Set
                End Property

                Public Property firstName() As String
                    Get
                        Return sFirstName
                    End Get
                    Set(ByVal value As String)
                        sFirstName = value
                    End Set
                End Property

                Public Property lastName() As String
                    Get
                        Return sLastName
                    End Get
                    Set(ByVal value As String)
                        sLastName = value
                    End Set
                End Property

                Public Property languagePreference() As String
                    Get
                        Return slanguagePreference
                    End Get
                    Set(ByVal value As String)
                        slanguagePreference = value
                    End Set
                End Property

            End Class
        End Namespace
_
作为字符串的公共共享函数Foo(ByVal数据作为对象)
将jO作为JObject=JObject.FromObject(数据)进行调整
Dim sMessage为String=“y”
尝试
Dim结果为IList(Of JToken)=jO(“profile”).Children().ToList()
Dim searchResults As IList(属于RF.MyIDProfile)=新列表(属于RF.MyIDProfile)()
对于每个结果,作为JToken In results
Dim searchResult为RF.MyIDProfile=JsonConvert.DeserializeObject(属于RF.MyIDProfile)(result.ToString())
searchResults.Add(searchResult)
下一个
Dim stest As String=jO.SelectToken(“profile.myid”).ToString
特例
sMessage=“e”
结束尝试
回信
端函数
名称空间RF
公共类MyIDProfile
私有sMYID作为字符串
作为字符串的私有sUSERName
私有sPrefix作为字符串
私有sFirstName作为字符串
私有sLastName作为字符串
私有俚语首选项为字符串
公共属性myid()作为字符串
得到
返回sMYID
结束
设置(ByVal值作为字符串)
sMYID=值
端集
端属性
公共属性username()作为字符串
得到
回归苏瑟南
结束
设置(ByVal值作为字符串)
sUSERName=价值
端集
端属性
公共属性firstName()作为字符串
得到
返回sFirstName
结束
设置(ByVal值作为字符串)
sFirstName=value
端集
端属性
公共属性lastName()作为字符串
得到
返回sLastName
结束
设置(ByVal值作为字符串)
sLastName=value
端集
端属性
公共属性languagePreference()作为字符串
得到
返回俚语偏好
结束
设置(ByVal值作为字符串)
俚语偏好=值
端集
端属性
末级
结束命名空间

如果我使用SelectToken(“profile.myid”),我就能够获得没有问题的值。我不确定是什么原因导致了这个错误。有人能看一下吗

我发现了问题所在。我的代码是用于反序列化对象数组的,而传递的json对象不是导致错误的对象数组。我拆下了回路,并将其更换为:

          <System.Web.Services.WebMethod()> _
         Public Shared Function Foo(ByVal data As Object) As String
                Dim jO As JObject = JObject.FromObject(data)
                Dim sMessage As String = "y"
                Try

                    Dim oDetail As RF.MyIDProfile = jO("profile").ToObject(Of RF.MyIDProfile)()

                    Dim sTest2 As String = oDetail.myid
                Catch ex As Exception
                    sMessage = "e"
                End Try


                Return sMessage
            End Function
_
作为字符串的公共共享函数Foo(ByVal数据作为对象)
将jO作为JObject=JObject.FromObject(数据)进行调整
Dim sMessage为String=“y”
尝试
Dim oDetail作为RF.MyIDProfile=jO(“profile”).ToObject(属于RF.MyIDProfile)()
Dim sTest2作为字符串=oDetail.myid
特例
sMessage=“e”
结束尝试
回信
端函数

如果您解决了自己的问题,您可以(也应该)而不是编辑问题以包含答案。这样其他人就会知道问题得到了回答。谢谢@我道歉。我当时认为,编辑这个问题会比添加它作为答案更好。无论如何,解决方案已经被转移到了一个答案上。