2013-07-17 24 views
5
से सी # अमान्य JSON आदिम पढ़ना

मैं एक कुकी मूल्य के रूप में एक जावास्क्रिप्ट वस्तु स्टोर करने के लिए JQuery.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: '/' }); 

जब मैं फ़ायरबग में डिबग, कुकी मूल्य के मूल्य स्वरूपित किया जा रहा है सही ढंग से:

{ "विषय": "रोग बचाव और प्रबंधन", "स्थान": "हैचरी हिल क्लिनिक", "classname": "मैं मधुमेह है, मैं क्या खा सकते हैं"}

मैं मैं सी # में एक शेयरपॉइंट वेब भाग लिख रहा हूं जो कुकी को पढ़ता है और इसे पार करता है:

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

मैं करने के लिए serializing के लिए एक रिफाइनर वर्ग है:

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

हालांकि, इस कोड एक "अमान्य JSON आदिम" त्रुटि फेंकता है। मैं यह नहीं समझ सकता कि यह क्यों काम नहीं कर रहा है। एक संभावना यह है कि यह कुकी को सही ढंग से नहीं पढ़ रहा है। जब मैं कुकी के मूल्य को स्ट्रिंग के रूप में प्रिंट करता हूं, तो मुझे मिलता है:

% 7 बी% 22 टोपी%%% 3%% 22%% 20% 2%% 20%% 20% 2%% 22 क्लास% 22% 3 ए% 22 चाइल्डबर्थ% 20 % 26% 20Parenting% 202,013% 22% 2C% 22Location% 22% 3 ए% 22GHC% 20East% 20Clinic% 22% 7 दिन

उत्तर

12

यूआरएल इनकोडिंग प्रकट होता है, HtmlUtility की UrlDecode विधि (का उपयोग करते हुए मूल्य डिकोडिंग कोशिश जो एक उदाहरण की Server संपत्ति के माध्यम से एक पेज से सामने आ रहा है):

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

हाँ धन्यवाद! वह काम किया। मुझे सर्वर.उरल डीकोड को अपने शेयर प्वाइंट वेबपार्ट के बाद से थोड़ा सा समायोजन करना पड़ा, लेकिन यह आश्चर्यजनक रूप से काम करता था: var refiners = serializer.Deserialize (HttpContext.Current.Server.UrlDecode (cookie.Value)); – user1231748

+0

@ user1231748 बेशक, मुझे आपको स्थिर संदर्भ, मेरे बुरे तक पहुंचने के लिए वह विवरण देना चाहिए था। खुशी है कि आप इसे जा रहे हैं। –

1

मैं तुम्हें कुकी अक्रमांकन से पहले डिकोड करने के लिए की जरूरत है। उपयोग करने का प्रयास करें;

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