Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从Cookie读取的JSON原语无效_C#_Json_Sharepoint 2013 - Fatal编程技术网

C#从Cookie读取的JSON原语无效

C#从Cookie读取的JSON原语无效,c#,json,sharepoint-2013,C#,Json,Sharepoint 2013,我使用JQuery.Cookie将javascript对象存储为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

我使用JQuery.Cookie将javascript对象存储为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: '/' });
在firebug中调试时,cookie值的格式似乎正确:

{“主题”:“疾病预防和管理”,“地点”:“孵化山诊所”,“课程名称”:“我有糖尿病,我能吃什么?”

我正在用C#编写一个SharePoint web部件,在其中读取cookie并对其进行解析:

        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);
        }
    }
然而,这段代码抛出了一个“无效的JSON原语”错误。我不明白这为什么不起作用。一种可能是它没有正确读取cookie。当我将cookie的值打印为字符串时,我得到:


%7B%22主题%22%3A%22疾病%20预防%20和%20管理%22%2C%22类%22%3A%22分娩%20%26%20养育%202013%22%2C%22位置%22%3A%22GHC%20East%20Clinic%22%7D出现URL编码,请尝试使用的方法解码该值(其中一个实例通过属性由页面公开):

var-refiners=serializer.Deserialize(Server.UrlDecode(cookie.Value));

我认为在反序列化之前需要对cookie进行解码。尝试使用

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

是的,谢谢!成功了。由于它是一个共享点Web部件,我不得不对access Server.UrlDecode做一些轻微的调整,但它工作得非常好:var refiners=serializer.Deserialize(HttpContext.Current.Server.UrlDecode(cookie.Value))@用户1231748当然,我应该给你这个细节来访问静态引用,我的错。很高兴你成功了。
var refiners = serializer.Deserialize<Refiners>(Server.UrlDecode(cookie.Value));
Refiners refiners = serializer.Deserialize<Refiners>(Server.UrlDecode(cookie.Value));