У меня есть объект JSON, встроенный в javascript, который я хотел бы передать в запрос ajax в VB.Net WebMethod и десериализовать его. Я использую Newtonsoft JSON для десериализации объекта. Похоже, что объект передается более, но когда я пытаюсь десериализации его в объект, я получаю эту ошибку: Error converting value "myid" to type 'AnID.RF.MyIDProfile'.
Deserialize JSON в Webmethod от запроса AJAX
Вот 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
Если я использую SelectToken («profile.myid») Я могу получить значение без каких-либо проблем. Я не уверен, что я могу делать неправильно, что вызывает эту ошибку. Может ли кто-нибудь взглянуть и посмотреть?
Если вы решили свой вопрос, вы можете (и должны) [ответить сам] (http://meta.stackexchange.com/questions/17845/etiquette -ответ-ваш-собственный-вопрос) вместо того, чтобы редактировать вопрос, чтобы включить ответ. Таким образом, другие узнают, что на вопрос ответили. Благодаря! – dbc
@dbc Прошу прощения. В то время я думал, что было бы лучше просто отредактировать вопрос, а добавить его в качестве ответа. В любом случае решение было перенесено на ответ. – pmb88