使用 Json.Net 将 JavaScript 关联数组反序列化为 C# 字典



我使用 JSON.stringify() 在 cookie 中存储带有布尔值的整数键的 javascript 关联数组,例如 var arr = {}; arr[9000001] = True; . 我可以在服务器上看到字符串的值,格式如下:%7B%229000001%22%3Atrue%2C%229000003%22%3Atrue%2C%229000006%22%3Atrue%2C%229000009%22%3Atrue%7D第一个数字是9000001,第二个是9000003,依此类推。

我想使用 Json.Net 反序列化为Dictionary<long,bool>或类似版本。 我尝试以下

var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(cookieValue);

但得到以下异常

{"Unexpected character encountered while parsing value: %. Path '', line 0, position 0."}

我猜在这种情况下无法反序列化?

Frits van Campen找到了丢失的部分。 我编写了以下扩展方法,该方法可以轻松地在 C# 中检索 cookie 值。 将urlDecodefromJson都设置为true,对象将成功反序列化。

/// <summary>
/// retrieve object from cookie
/// </summary>
/// <typeparam name="T">type of object</typeparam>
/// <param name="controller"></param>
/// <param name="cookieName">name of cookie</param>
/// <param name="urlDecode">true to enable url decoding of the string</param>
/// <param name="fromJson">true if the string in cookie is Json stringified</param>
/// <returns>object in the cookie, or default value of T if object does not exist</returns>
public static T GetFromCookie<T>(this Controller controller, string cookieName, 
                                 bool urlDecode = true, bool fromJson = false)
{
    var cookie = controller.HttpContext.Request.Cookies[cookieName];
    if (cookie == null) return default(T);
    var value = cookie.Value;
    if (urlDecode)
        value = Uri.UnescapeDataString(value);
    T result;
    if (fromJson)
        result = JsonConvert.DeserializeObject<T>(value);
    else
        result = (T)Convert.ChangeType(value, typeof(T));
    return result;
}

相关内容

  • 没有找到相关文章

最新更新