2010-12-10 9 views
0

Aus irgendeinem Grund in ASP.NET AJAX, wenn ich dies tun:ASP.NET AJAX Deserialisierung

Sys.Serialization.JavaScriptSerializer.serialize({attachToValidators:true}); 

Dies ist das Ergebnis:

"{"attachToValidators":true}" 

ich Umkehren versuchen, das Ergebnis:

Sys.Serialization.JavaScriptSerializer.deserialize("{\"attachToValidators\":true}"); 

oder:

Sys.Serialization.JavaScriptSerializer.deserialize("{attachToValidators:true}"); 

Ich bekomme dieses Ergebnis:

Sys.ArgumentException: Kann nicht deserialisiert werden. Die Daten entsprechen keinem gültigen JSON. Parametername: Daten

Warum ist das?

Danke.

Antwort

0

Antwort hier gepostet, obwohl in 3.5, es funktioniert gut für mich, ich habe nicht JSON.parse brauchen, damit ich weiß nicht recht, was passiert ist: http://forums.asp.net/t/1631638.aspx

-1

Was versuchen Sie es zu deserialisieren zu? Dies ist, wie JavaScriptSerializer arbeitet, für die Deserialisierung:

public class ValidatorInfo 
{ 
    public bool attachToValidators { get; set; } 
} 

public void yourFunction() 
{ 
    var js = new JavaScriptSerializer(); 

    ValidatorInfo info = js.Deserialize<ValidatorInfo>("{\"attachToValidators\":true}"); 

    // True. 
    info.attachToValidators == true; 
} 

In Ihrer Frage, werden Sie einen anonymen Typen Serialisierung, so dass Sie weg mit nicht einen darunter liegenden Typ mit serialisiert. Auf dem Rückweg funktioniert das allerdings nicht.

Wenn Sie mehr dynamisches Verhalten benötigen, bietet Json.Net mit seiner LINQ-Implementierung so etwas an.

+0

Mein Beispiel ist clientseitigen Code, nicht serverseitig. –

+0

Sie sollten json2.js auf der Client-Seite verwenden. In späteren Browsern werden dadurch die schnelleren und sichereren browsereigenen JSON.parse- und JSON.stringify-Funktionen genutzt. In älteren Versionen wird es zu JavaScript-basiertem Code degradiert, ähnlich wie bei Sys.Serialization. –

+0

OK, aber ich verstehe nicht, warum Code, der vorher funktioniert hat, jetzt auf mir scheitert, da es die Implementierung von MS ist, es sei denn, ich vermisse eine Setup-Referenz in .NET 4.0 ... –