2009-01-28 7 views
4

J'ai un cas de test d'un problème que j'ai, fondamentalement je crée un objet json sur le serveur et le rends à un AJAX appelé fait sur le côté client. Cela fonctionne très bien, cependant, lorsque je tente de le renvoyer et désérialiser côté serveur, je reçois l'exception suivante:Je désérialise json du client dans json.net 3.5b2 dans vb.net

Aucun constructeur défini pour parameterless type de « System.String ».

System.MissingMethodException à System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject (IDictionary rawParams) à System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams (cible de l'objet , IDictionary 2 parameters) at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary 2 rawParams) à System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext contexte, 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 

J'apprécierais l'aide sur ce que je fais mal ici. Merci d'avance.

Répondre

3

a dû changer

Private Class _date 

à

Public Class _date 

et

<WebMethod()> Public Shared Function deserialize(ByVal json As String) As String 

à

<WebMethod()> Public Shared Function deserialize(ByVal json As _date) As String 
Questions connexes