C#: Lagre objekt til cookie
/// <summary>
/// util for å serialize /deserialize objekter til cookies
/// </summary>
public static class CookieUtils
{
/// util for å serialize /deserialize objekter til cookies
/// </summary>
public static class CookieUtils
{
/// <summary>
/// Henter satt cookie som object, returnerer null hvis cookie ikke finnes
/// </summary>
/// <param name="navn"></param>
/// <returns></returns>
public static T GetCookie<T>(string navn) where T : class, new()
{
StringReader stream;
/// Henter satt cookie som object, returnerer null hvis cookie ikke finnes
/// </summary>
/// <param name="navn"></param>
/// <returns></returns>
public static T GetCookie<T>(string navn) where T : class, new()
{
StringReader stream;
try
{
{
HttpCookie c = HttpContext.Current.Request.Cookies[navn];
if (c == null || string.IsNullOrEmpty(c.Value))
return default(T);
if (c == null || string.IsNullOrEmpty(c.Value))
return default(T);
string[] verdier = c.Value.Split('|');
int n = 0;
T objekt = new T();
Type type = objekt.GetType();
//Type type = objekt.GetType();
FieldInfo[] felter = type.GetFields();
foreach (FieldInfo feltinf in felter)
{
feltinf.SetValue(objekt, verdier[n++]);
}
//Type type = objekt.GetType();
FieldInfo[] felter = type.GetFields();
foreach (FieldInfo feltinf in felter)
{
feltinf.SetValue(objekt, verdier[n++]);
}
PropertyInfo[] props = type.GetProperties();
foreach (PropertyInfo propinf in props)
{
SetProperty(propinf, verdier[n++], objekt);
}
foreach (PropertyInfo propinf in props)
{
SetProperty(propinf, verdier[n++], objekt);
}
return objekt;
}
catch (Exception ex)
{
throw new BasisException(ex);
}
}
catch (Exception ex)
{
throw new BasisException(ex);
}
}
/// <summary>
/// Lager cookie av gjeldende objekt som utløper om 10 timer
/// </summary>
/// <param name="navn"></param>
/// <param name="objekt"></param>
public static void SetCookie(string navn, object objekt)
{
SetCookie(navn, objekt, DateTime.Now.AddHours(10));
}
/// <summary>
/// Lager cookie av gjeldende objekt
/// </summary>
/// <param name="navn"></param>
/// <param name="objekt"></param>
/// <param name="utløper"></param>
public static void SetCookie(string navn, object objekt, DateTime utløper)
{
/// Lager cookie av gjeldende objekt
/// </summary>
/// <param name="navn"></param>
/// <param name="objekt"></param>
/// <param name="utløper"></param>
public static void SetCookie(string navn, object objekt, DateTime utløper)
{
try
{
StringBuilder streng = new StringBuilder();
Type type = objekt.GetType();
FieldInfo[] felter = type.GetFields();
foreach (FieldInfo feltinf in felter)
{
if (feltinf != null)
{
object verdi = feltinf.GetValue(objekt);
streng.Append(verdi.ToString() + "|");
Type type = objekt.GetType();
FieldInfo[] felter = type.GetFields();
foreach (FieldInfo feltinf in felter)
{
if (feltinf != null)
{
object verdi = feltinf.GetValue(objekt);
streng.Append(verdi.ToString() + "|");
}
}
}
PropertyInfo[] props = type.GetProperties();
foreach (PropertyInfo propinf in props)
{
if (propinf != null)
{
object verdi = propinf.GetValue(objekt, null);
streng.Append(verdi.ToString() + "|");
}
}
foreach (PropertyInfo propinf in props)
{
if (propinf != null)
{
object verdi = propinf.GetValue(objekt, null);
streng.Append(verdi.ToString() + "|");
}
}
HttpCookie c = new HttpCookie(navn, streng.ToString());
c.Expires = utløper;
if (HttpContext.Current.Request.Cookies[navn] != null)
//finnes fra før
HttpContext.Current.Response.Cookies.Set(c);
else
//finnes ikke, lag ny
HttpContext.Current.Response.Cookies.Add(c);
//finnes fra før
HttpContext.Current.Response.Cookies.Set(c);
else
//finnes ikke, lag ny
HttpContext.Current.Response.Cookies.Add(c);
}
catch (Exception ex)
{
throw new BasisException(ex);
}
}
catch (Exception ex)
{
throw new BasisException(ex);
}
}
/// <summary>
/// sletter en satt cookie
/// (resetter verdi og setter utløpsdato tilbake i tid)
/// </summary>
/// <param name="navn"></param>
public static void SlettCookie(string navn)
{
//tømmer verdi og setter utløpt for ett år siden
HttpCookie c = new HttpCookie(navn, "");
c.Expires = DateTime.Now.AddYears(-1);
if (HttpContext.Current.Request.Cookies[navn] != null)
//finnes fra før
HttpContext.Current.Response.Cookies.Set(c);
//finnes fra før
HttpContext.Current.Response.Cookies.Set(c);
}
/// <summary>
/// Hjelpemetode for å sette en verdi via reflection etc
/// </summary>
/// <param name="pInfo"></param>
/// <param name="propertyName"></param>
/// <param name="propertyValue"></param>
/// <param name="control"></param>
/// <param name="objectToSetValue"></param>
private static void SetProperty(PropertyInfo pInfo, string propertyValue, object objectToSetValue)
{
Type pType = pInfo.PropertyType;
if (pType == typeof(string))
pInfo.SetValue(objectToSetValue, propertyValue, null);
else if (pType == typeof(bool))
pInfo.SetValue(objectToSetValue, Convert.ToBoolean(propertyValue), null);
else if (pType == typeof(int))
pInfo.SetValue(objectToSetValue, Convert.ToInt32(propertyValue), null);
else
throw new NotImplementedException("Objektet har felttype som ikke er implementert enda..");
}
}
pInfo.SetValue(objectToSetValue, propertyValue, null);
else if (pType == typeof(bool))
pInfo.SetValue(objectToSetValue, Convert.ToBoolean(propertyValue), null);
else if (pType == typeof(int))
pInfo.SetValue(objectToSetValue, Convert.ToInt32(propertyValue), null);
else
throw new NotImplementedException("Objektet har felttype som ikke er implementert enda..");
}
}
Posted by email from Henris blogg (posterous)
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment