2013-07-17 8 views
5

Ich verwende JQuery.Cookie ein Javascript-Objekt als Cookie-Wert zu speichern:C# Ungültige JSON Primitive Lesen von Cookie-

var refinerData = {}; 
// Read in the current cookie if it exists: 
if ($.cookie('RefinerData') != null) { 
    refinerData = JSON.parse($.cookie('RefinerData')); 
} 
// Set new values based on the category and filter passed in 
switch(category) 
{ 
    case "topic": 
     refinerData.Topic = filterVal; 
     break; 
    case "class": 
     refinerData.ClassName = filterVal; 
     break; 
    case "loc": 
     refinerData.Location = filterVal; 
     break; 
}  
// Save the cookie: 
$.cookie('RefinerData', JSON.stringify(refinerData), { expires: 1, path: '/' }); 

Wenn ich in Firebug zu debuggen, wird der Wert des Cookie-Wert scheint formatiert zu werden richtig:

{ "Thema": "Prävention und Management", "Ort": "Hatchery Hill Clinic", "Klassenname": "ich habe Diabetes, Was kann ich essen"}

I‘ m Schreiben eines SharePoint-Webparts in C#, das den Cookie einliest und analysiert:

 protected void Page_Load(object sender, EventArgs e) 
    { 
     HttpCookie cookie = HttpContext.Current.Request.Cookies["RefinerData"]; 
     if (cookie != null) 
     { 
      string val = cookie.Value; 
      // Deserialize JSON cookie: 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      var refiners = serializer.Deserialize<Refiners>(cookie.Value); 
      output.AppendLine("Deserialized Topic = " + refiners.Topic); 
      output.AppendLine("Cookie exists: " + val); 
     } 
    } 

Ich habe eine Refiner-Klasse für die Serialisierung zu:

public class Refiners 
{ 
    public string Topic { get; set; } 
    public string ClassName { get; set; } 
    public string Location { get; set; } 
} 

jedoch dieser Code löst eine "Invalid JSON Primitive" -Fehler. Ich kann nicht herausfinden, warum das nicht funktioniert. Eine Möglichkeit ist, dass es den Cookie nicht richtig liest. Wenn ich den Wert des Cookies als Zeichenfolge ausdrucke, erhalte ich:

% 7B% 22Topic% 22% 3A% 22Erkrankung% 20Prävention% 20und% 20Management% 22% 2C% 22Class% 22% 3A% 22Kindergeburten% 20 % 26% 20Parenting% 202013% 22% 2C% 22Location% 22% 3A% 22GHC% 20East% 20Clinic% 22% 7D

Antwort

12

URL codiert angezeigt wird, versuchen, den Wert Dekodieren des UrlDecode Verfahren des HtmlUtility unter Verwendung (von denen eine Instanz von einer Seite durch die Server Eigenschaft angezeigt wird):

var refiners = serializer.Deserialize<Refiners>(Server.UrlDecode(cookie.Value)); 
+2

Ja DANKE! das hat funktioniert. Ich musste eine leichte Anpassung vornehmen, um auf Server.UrlDecode zuzugreifen, da es ein Share-Point-Webpart war, aber es funktionierte wunderbar: var refiners = serializer.Deserialize (HttpContext.Current.Server.UrlDecode (cookie.Value)); – user1231748

+0

@ user1231748 Natürlich hätte ich Ihnen dieses Detail geben müssen, um auf die statische Referenz zuzugreifen, mein Fehler. Ich bin froh, dass du es geschafft hast. –

1

ich glaube, Sie brauchen das Cookie vor der Deserialisierung zu entschlüsseln. Versuchen Sie es mit;

Refiners refiners = serializer.Deserialize<Refiners>(Server.UrlDecode(cookie.Value));