2013-07-17 4 views
5

Używam JQuery.Cookie przechowywać JavaScript Object jako wartości cookie:C# Nieprawidłowy JSON Primitive Czytanie z 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: '/' }); 

Kiedy debugowania w Firebug, wartość wartości ciasteczka wydaje się być sformatowane poprawnie:

{ "temat": "zapobieganie chorobom i Zarządzanie", "Lokalizacja": "Wylęgarnia Hill Klinika", "ClassName": "mam cukrzycę, co mogę jeść"}

i m napisanie strony internetowej SharePoint w języku C#, która odczytuje plik cookie i analizuje go:

 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); 
     } 
    } 

Mam klasy rafinerie do szeregowania do:

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

Jednak ten kod wygeneruje „Nieprawidłowy JSON prymitywnych” błąd. Nie mogę zrozumieć, dlaczego to nie działa. Jedną z możliwości jest nieprawidłowe odczytanie pliku cookie. Gdy wydrukuję wartość pliku cookie jako ciąg, otrzymam:

% 7B% 22Typowe% 22% 3A% 22Zniszczenie% 20Opcja% 20i% 20Zarządzanie% 22% 2C% 22Klasa% 22% 3A% 22Childbirth% 20 % 26% 20Parenting% 202013% 22% 2C% 22Location% 22% 3A% 22GHC% 20East% 20Clinic% 22% 7D

Odpowiedz

12

Pojawia URL zakodowane próbować dekodowania wartości z wykorzystaniem metody UrlDecode z HtmlUtility (z których wystąpienie narażona jest przez strony za pośrednictwem właściwości Server):

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

Tak, DZIĘKUJĘ! to się udało. Musiałem dokonać niewielkiej korekty, aby uzyskać dostęp do Server.UrlDecode od jego strony internetowej, ale działało to cudownie: var refiners = serializer.Deserialize (HttpContext.Current.Server.UrlDecode (cookie.Value)); – user1231748

+0

@ user1231748 Oczywiście, powinienem był dać ci ten szczegół, aby uzyskać dostęp do statycznego odniesienia, moje złe. Cieszę się, że to się zaczęło. –

1

myślę, że trzeba rozszyfrować cookie przed deserializacji. Spróbuj użyć;

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