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
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
@ 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. –