gpt4 book ai didi

c# cookie 无法将类型 'string' 转换为 'x'

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:42 28 4
gpt4 key购买 nike

我有这条鳕鱼:

 [Serializable]
public class testC
{
string sir;
public testC()
{
sir = string.Empty;
}
public string GetString
{
get { return sir; }
set { sir = value; }

}
}
public class cookieTest
{
testC test;
public cookieTest()
{
test = new testC();
}
public testC GetTestC
{
get
{
HttpCookie cookie = HttpContext.Current.Request.Cookies["test"];
test = cookie["first"] as testC;
return test;
}
set
{
HttpCookie cookie = new HttpCookie("test");
cookie.Expires = DateTime.Now.AddHours(8);
cookie["first"] = value.ToString();
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
}
}

我得到这个错误

Cannot convert type 'string' to 'testC' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion

是否可以从 cookie 中获取对象?或者我必须将我所有的数据写入 cookie 以设置和获取所有数据并创建一个新对象来获取?

最佳答案

Is possible to get the object from cookie?

不,不是像您尝试的那样直接。不要考虑 ASP.NET。想一想 HTTP cookie在现实中。它是一个 HTTP header 。 HTTP header 只是纯字符串值。 HTTP 协议(protocol)中没有对象的概念。

因此,您需要将拥有的 .NET 对象序列化为字符串,然后再将其反序列化。

您可以使用 .NET 中的不同序列化程序。例如使用 BinaryFormatter然后 Base64 encode要存储到 cookie 中的结果字节数组。

反序列化是逆过程——你从 cookie 中读取值(它总是一个字符串),然后你 Base64 decode它变成一个字节数组,您可以使用 BinaryFormatter 将其反序列化回原始对象。

请记住,cookie 的大小是有限的,并且会因不同的浏览器而异。所以不要期望将大对象放入 cookie 中。该值将被剥离,您将获得损坏的数据。如果对象的总序列化值大于 2k 个字符,我不会使用它们。

让我们举例说明前面描述的过程:

public class cookieTest
{
testC test;
public cookieTest()
{
test = new testC();
}
public testC GetTestC
{
get
{
var cookie = HttpContext.Current.Request.Cookies["test"];
return Deserialize<testC>(cookie.Value);
}
set
{
var cookie = new HttpCookie("test");
cookie.Expires = DateTime.Now.AddHours(8);
cookie["first"] = Serialize(value);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
}

private static string Serialize<T>(T instance)
{
using (var stream = new MemoryStream())
{
var serializer = new BinaryFormatter();
serializer.Serialize(stream, instance);
return Convert.ToBase64String(stream.ToArray());
}
}

private static T Deserialize<T>(string value)
{
using (var stream = new MemoryStream(Convert.FromBase64String(value)))
{
var serializer = new BinaryFormatter();
return (T)serializer.Deserialize(stream);
}
}
}

关于c# cookie 无法将类型 'string' 转换为 'x',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12996305/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com