У меня есть тестовый пример проблемы, с которой я столкнулся, в основном я создаю объект json на сервере и возвращаю его в AJAX с именем made на стороне клиента. Это работает нормально, однако, когда я пытаюсь отправить его обратно и десериализовать его на стороне сервера, я получаю следующее исключение:
Не определен конструктор без параметров для типа 'System.String'.
System.MissingMethodException в
System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject (IDictionary 2
dictionary, Type type,
JavaScriptSerializer serializer,
Boolean throwOnError, Object&
convertedObject) at
system.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object
o, Type type, JavaScriptSerializer
serializer, Boolean throwOnError,
Object& convertedObject) at
system.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object
o, Type type, JavaScriptSerializer
serializer, Boolean throwOnError,
Object& convertedObject) at
System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object
o, Type type, JavaScriptSerializer
serializer) at
System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary
2
rawParams) в
System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams (Объект
target, IDictionary 2 parameters) at
System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext
context, WebServiceMethodData
methodData, IDictionary
2 rawParams)
в
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext
контекст, WebServiceMethodData
methodData)
Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script src="http://www.json.org/json2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-latest.pack.js" type="text/javascript" ></script>
<script type="text/javascript">
$(document).ready(function(){
$.theDate = {};
$("#Button1").click(function(){
$.ajax({
type: 'POST',
url: 'default.aspx/getDate',
data: '{}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(json){
var date = eval("("+json.d+")");
$.theDate = date;
var pdate = eval("("+json.d.replace(/"\\\/Date\(([0-9]+)[0-9-]+\)\\\/"/gi, 'new Date(parseInt($1,10))')+")");
$("#now").val(date.now);
$("#pnow").val(pdate.now);
$("#strnow").val(date.strnow);
},
error: function(xmlhr, status, err){
console.error(arguments);
var response = eval("("+xmlhr.responseText+")");
console.log(response);
}
});
});
$("#Button2").click(function(){
var json = JSON.stringify($.theDate);
json = '{"json":'+json+'}';
$.ajax({
type:'POST',
url:'default.aspx/deserialize',
data: json,
contentType:'application/json; charset=utf-8',
dataType: 'json',
success: function(json){
var date = eval("("+json.d+")");
console.log(date);
},
error: function(xmlhr, status, err){
console.error(arguments);
var response = eval("("+xmlhr.responseText+")");
console.log(response);
}
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="Get Date" /><br />
date.now: <input type="text" id="now" value="" style="width:20em" /><br />
date.now processed: <input type="text" id="pnow" value="" style="width:30em"><br />
date.strnow: <input type="text" id="strnow" value="" style="width:20em"/>
<input id="Button2" type="button" value="Send Date" /><br />
</div>
</form>
</body>
</html>
Default.aspx.vb
Imports System.Web.Services
Imports Newtonsoft.Json
Partial Class _Default
Inherits System.Web.UI.Page
Private Class _date
<JsonProperty()> Public now As New Date
<JsonProperty()> Public strnow As String
Public Sub New()
now = Date.Today
strnow = Date.Today.ToLongDateString
End Sub
End Class
<WebMethod()> Public Shared Function getDate() As String
Dim theDate As New _date
Dim strJson As String
strJson = JsonConvert.SerializeObject(theDate)
Return strJson
End Function
<WebMethod()> Public Shared Function deserialize(ByVal json As String) As String
Dim newDate As _date
Try
newDate = JsonConvert.DeserializeObject(json, GetType(_date))
Return "{""done"":true}"
Catch ex As Exception
Throw ex
End Try
End Function
End Class
Я был бы очень признателен за помощь в том, что я делаю здесь неправильно. Заранее спасибо.