<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://www.codeplex.com/rss.xsl"?><rss version="2.0"><channel><title>Univar  -   Session, cookie, query string &amp; cache variables unified</title><link>http://univar.codeplex.com/project/feeds/rss</link><description>Univar makes it easier for ASP.NET developers to work with the session, cookie, query string or cache by offering a unified, flexible, type safe and generic toolset for all of them. Complex types are supported via serialization. It&amp;#39;s developed in C&amp;#35; &amp;#38; ASP.NET 3.5.</description><item><title>Updated Wiki: TestHome1</title><link>http://univar.codeplex.com/wikipage?title=TestHome1&amp;version=2</link><description>
&lt;div&gt;
&lt;div class="wikidoc"&gt;As a web developer I have often had to work with the session, cookie, query string&amp;nbsp;and cache to persist data locally.&amp;nbsp;But it has always&amp;nbsp;struck me that there was no neat way of doing so. So I came up with this wrapper which
 is meant to&amp;nbsp;provide&amp;nbsp;a&amp;nbsp;simple and unified&amp;nbsp;model to work with local storages. It&amp;nbsp;is&amp;nbsp;type safe and supports complex data types&amp;nbsp;even when working with&amp;nbsp;cookies and query strings, thanks to&amp;nbsp;Json serialization. Also a
 variable can seamlessly be based on more than one&amp;nbsp;persistence type if need be.
&lt;br&gt;
&lt;br&gt;
Below is a sample code that creates an object to store and integer in a session under the key &amp;quot;counter&amp;quot;:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
The Value property is used as follows to manipulate the integer:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  count.Value = count.Value &amp;#43; 10;
&lt;/pre&gt;
&lt;/div&gt;
Now to store the integer in a cookie the Sources.Cookie argument can be used as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
And this is how the Sources enum is declared whereby Sources.Session is the default when not specified:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;enum&lt;/span&gt; Sources
 {
     None = 0,
     QueryString = 1,
     Session = 2,
     PathBoundSession = 4,
     Cookie = 8,
     PathBoundCookie = 16,
     SessionBoundCookie = 32,
     UserBoundCookie = 64,
     Cache = 128,
     PathBoundCache = 256,
     SessionBoundCache = 512,
     UserBoundCache = 1024,
     BrowserBoundCache = 2048,
     FileCache = 4096,
     PathBoundFileCache = 8192,
     UserBoundFileCache = 16384,
     SessionBoundFileCache = 32768,
     BrowserBoundFileCache = 65536,
  }
&lt;/pre&gt;
&lt;/div&gt;
The key &amp;quot;counter&amp;quot; can be hardcoded in a custom class Keys to avoid typo errors:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
This is a generic version of the above example:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
Complex types are also supported as shown here using a custom class Person:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
More than one source type can also be specified sequencially as follows in case the former type returns a null value:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
In the above example the object will first look for the specified key in the session. If this attempt fails then the request will turn to the next sources cookie and cache in the queue.&lt;br&gt;
&lt;br&gt;
By default our object value is saved to all the targets in the source list(ie session, cookie and cache in our case). You can avoid writing to the cache, for example, by limiting the target types to the session and cookie as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Targets.Session &amp;#43; Targets.Cookie, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
Note that saving complex objects to the cookie and query string is achieved by using Json serialization.&lt;br&gt;
&lt;br&gt;
Now there is yet another way to access keys, more especially those having a common prefix. Here is how:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt; &lt;span style="color:blue"&gt;var&lt;/span&gt; persons = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person&amp;quot;&lt;/span&gt;);
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = persons[1].Value;
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person2 = persons[2].Value;
&lt;/pre&gt;
&lt;/div&gt;
Note that &amp;quot;_&amp;quot; is the default delimiter used to seperate the parent a.nd the child key. It is also the default key delimiter used with cookies since they inherently support parent/child keys.&lt;br&gt;
&lt;br&gt;
Note that you can call the ToString() function on any object having a complex generic type to obtain its Json representation.&lt;br&gt;
&lt;br&gt;
This wrapper brings a lot of flexibility but you should avoid saving more data to cookies and query strings than they can handle. A cookie will automatically clear itself when it grows beyond its size limit. To help overcome those issues an error will be thrown
 whenever the query string size grows beyond its 2048kb size limit and cookie compression has now been implemented.
&lt;br&gt;
&lt;br&gt;
More information on this project will be added with time if it gets enough traction from the community and meanwhile, of course, your suggestions, questions and critics are most welcome.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;lt;/form&amp;gt;&lt;/p&gt;
</description><author>ZiadJ</author><pubDate>Mon, 19 Sep 2011 22:57:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: TestHome1 20110919105720P</guid></item><item><title>Updated Wiki: TestHome1</title><link>http://univar.codeplex.com/wikipage?title=TestHome1&amp;version=1</link><description>&amp;lt;!--Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot;--&amp;gt;&amp;lt;!--CTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--&amp;gt;&amp;lt;!-- div.wikidoc pre { background-color: #ECECEC; border: dashed .1em #3E62A6; font-family:
 Consolas, &amp;quot;Courier New&amp;quot; ,Courier,Monospace; font-size: 1em; margin-top: 0; padding: .5em; padding-bottom: 1.5em; height: auto; overflow: auto; } --&amp;gt;&amp;lt;form id=&amp;quot;form1&amp;quot; accept-charset=&amp;quot;UNKNOWN&amp;quot; enctype=&amp;quot;application/x-www-form-urlencoded&amp;quot; method=&amp;quot;get&amp;quot;&amp;gt;
&lt;div&gt;
&lt;div class="wikidoc"&gt;As a web developer I have often had to work with the session, cookie, query string&amp;nbsp;and cache to persist data locally.&amp;nbsp;But it has always&amp;nbsp;struck me that there was no neat way of doing so. So I came up with this wrapper which
 is meant to&amp;nbsp;provide&amp;nbsp;a&amp;nbsp;simple and unified&amp;nbsp;model to work with local storages. It&amp;nbsp;is&amp;nbsp;type safe and supports complex data types&amp;nbsp;even when working with&amp;nbsp;cookies and query strings, thanks to&amp;nbsp;Json serialization. Also a
 variable can seamlessly be based on more than one&amp;nbsp;persistence type if need be.
&lt;br&gt;
&lt;br&gt;
Below is a sample code that creates an object to store and integer in a session under the key &amp;quot;counter&amp;quot;:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
The Value property is used as follows to manipulate the integer:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  count.Value = count.Value &amp;#43; 10;
&lt;/pre&gt;
&lt;/div&gt;
Now to store the integer in a cookie the Sources.Cookie argument can be used as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
And this is how the Sources enum is declared whereby Sources.Session is the default when not specified:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;enum&lt;/span&gt; Sources
 {
     None = 0,
     QueryString = 1,
     Session = 2,
     PathBoundSession = 4,
     Cookie = 8,
     PathBoundCookie = 16,
     SessionBoundCookie = 32,
     UserBoundCookie = 64,
     Cache = 128,
     PathBoundCache = 256,
     SessionBoundCache = 512,
     UserBoundCache = 1024,
     BrowserBoundCache = 2048,
     FileCache = 4096,
     PathBoundFileCache = 8192,
     UserBoundFileCache = 16384,
     SessionBoundFileCache = 32768,
     BrowserBoundFileCache = 65536,
  }
&lt;/pre&gt;
&lt;/div&gt;
The key &amp;quot;counter&amp;quot; can be hardcoded in a custom class Keys to avoid typo errors:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
This is a generic version of the above example:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
Complex types are also supported as shown here using a custom class Person:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
More than one source type can also be specified sequencially as follows in case the former type returns a null value:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
In the above example the object will first look for the specified key in the session. If this attempt fails then the request will turn to the next sources cookie and cache in the queue.&lt;br&gt;
&lt;br&gt;
By default our object value is saved to all the targets in the source list(ie session, cookie and cache in our case). You can avoid writing to the cache, for example, by limiting the target types to the session and cookie as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Targets.Session &amp;#43; Targets.Cookie, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
Note that saving complex objects to the cookie and query string is achieved by using Json serialization.&lt;br&gt;
&lt;br&gt;
Now there is yet another way to access keys, more especially those having a common prefix. Here is how:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt; &lt;span style="color:blue"&gt;var&lt;/span&gt; persons = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person&amp;quot;&lt;/span&gt;);
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = persons[1].Value;
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person2 = persons[2].Value;
&lt;/pre&gt;
&lt;/div&gt;
Note that &amp;quot;_&amp;quot; is the default delimiter used to seperate the parent a.nd the child key. It is also the default key delimiter used with cookies since they inherently support parent/child keys.&lt;br&gt;
&lt;br&gt;
Note that you can call the ToString() function on any object having a complex generic type to obtain its Json representation.&lt;br&gt;
&lt;br&gt;
This wrapper brings a lot of flexibility but you should avoid saving more data to cookies and query strings than they can handle. A cookie will automatically clear itself when it grows beyond its size limit. To help overcome those issues an error will be thrown
 whenever the query string size grows beyond its 2048kb size limit and cookie compression has now been implemented.
&lt;br&gt;
&lt;br&gt;
More information on this project will be added with time if it gets enough traction from the community and meanwhile, of course, your suggestions, questions and critics are most welcome.&lt;/div&gt;
&lt;/div&gt;
&amp;lt;/form&amp;gt;</description><author>ZiadJ</author><pubDate>Mon, 19 Sep 2011 22:56:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: TestHome1 20110919105625P</guid></item><item><title>Updated Wiki: TestHome</title><link>http://univar.codeplex.com/wikipage?title=TestHome&amp;version=1</link><description>&amp;lt;!--Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot;--&amp;gt;&amp;lt;!--CTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--&amp;gt;&amp;lt;!-- div.wikidoc pre { background-color: #ECECEC; border: dashed .1em #3E62A6; font-family:
 Consolas, &amp;quot;Courier New&amp;quot; ,Courier,Monospace; font-size: 1em; margin-top: 0; padding: .5em; padding-bottom: 1.5em; height: auto; overflow: auto; } --&amp;gt;&amp;lt;form id=&amp;quot;form1&amp;quot; accept-charset=&amp;quot;UNKNOWN&amp;quot; enctype=&amp;quot;application/x-www-form-urlencoded&amp;quot; method=&amp;quot;get&amp;quot;&amp;gt;
&lt;div&gt;
&lt;div class="wikidoc"&gt;As a web developer I have often had to work with the session, cookie, query string&amp;nbsp;and cache to persist data locally.&amp;nbsp;But it has always&amp;nbsp;struck me that there was no neat way of doing so. So I came up with this wrapper which
 is meant to&amp;nbsp;provide&amp;nbsp;a&amp;nbsp;much simpler and unified&amp;nbsp;model to work with. It&amp;nbsp;is&amp;nbsp;type safe and supports complex data types&amp;nbsp;even when working with&amp;nbsp;cookies and query strings, thanks to&amp;nbsp;Json serialization which by the way&amp;nbsp;has
 full&amp;nbsp;support&amp;nbsp;within&amp;nbsp;javascript. Also a variable can seamlessly be based on more than one&amp;nbsp;persistence type if need be.
&lt;br&gt;
&lt;br&gt;
Below is a sample code that creates an object to store and integer in a session under the key &amp;quot;counter&amp;quot;:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
The Value property is used as follows to manipulate the integer:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  count.Value = count.Value &amp;#43; 10;
&lt;/pre&gt;
&lt;/div&gt;
Now to store the integer in a cookie the Sources.Cookie argument can be used as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(&lt;span style="color:#a31515"&gt;&amp;quot;counter&amp;quot;&lt;/span&gt;, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
And this is how the Sources enum is declared whereby Sources.Session is the default when not specified:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;enum&lt;/span&gt; Sources
{
        None = 0,
        QueryString = 1,
        Session = 2,
        PathBoundSession = 4,
        Cookie = 8,
        PathBoundCookie = 16,
        SessionBoundCookie = 32,
        UserBoundCookie = 64,
        Cache = 128,
        PathBoundCache = 256,
        SessionBoundCache = 512,
        UserBoundCache = 1024,
        BrowserBoundCache = 2048,
        FileCache = 4096,
        PathBoundFileCache = 8192,
        UserBoundFileCache = 16384,
        SessionBoundFileCache = 32768,
        BrowserBoundFileCache = 65536,
}
&lt;/pre&gt;
&lt;/div&gt;
The key &amp;quot;counter&amp;quot; can be hardcoded in a custom class Keys to avoid typo errors:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
This is a generic version of the above example:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; count = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;(Keys.Counter, Sources.Cookie);
&lt;/pre&gt;
&lt;/div&gt;
Complex types are also supported as shown here using a custom class Person:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
More than one source type can also be specified sequencially as follows in case the former type returns a null value:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
In the above example the object will first look for the specified key in the session. If this attempt fails then the request will turn to the next sources cookie and cache in the queue.&lt;br&gt;
&lt;br&gt;
By default our object value is saved to all the targets in the source list(ie session, cookie and cache in our case). You can avoid writing to the cache, for example, by limiting the target types to the session and cookie as follows:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person_1&amp;quot;&lt;/span&gt;, Targets.Session &amp;#43; Targets.Cookie, Sources.Session, Sources.Cookie, Sources.Cache);
&lt;/pre&gt;
&lt;/div&gt;
Note that saving complex objects to the cookie and query string is achieved by using Json serialization.&lt;br&gt;
&lt;br&gt;
Now there is yet another way to access keys, more especially those having a common prefix. Here is how:&lt;br&gt;
&lt;div style="background-color:white; color:black"&gt;
&lt;pre&gt;  &lt;span style="color:blue"&gt;var&lt;/span&gt; persons = &lt;span style="color:blue"&gt;new&lt;/span&gt; DynamicStore&amp;lt;Person&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;person&amp;quot;&lt;/span&gt;);
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person1 = persons[1].Value;
 &lt;span style="color:blue"&gt;var&lt;/span&gt; person2 = persons[2].Value;
&lt;/pre&gt;
&lt;/div&gt;
Note that &amp;quot;_&amp;quot; is the default delimiter used to seperate the parent a.nd the child key. It is also the default key delimiter used with cookies since they inherently support parent/child keys.&lt;br&gt;
&lt;br&gt;
Note that you can call the ToString() function on any object having a complex generic type to obtain its Json representation.&lt;br&gt;
&lt;br&gt;
This wrapper brings a lot of flexibility but you should avoid saving more data to cookies and query strings than they can handle. A cookie will automatically clear itself when it grows beyond its size limit. To help overcome those issues an error will be thrown
 whenever the query string size grows beyond its 2048kb size limit and cookie compression has now been implemented.
&lt;br&gt;
&lt;br&gt;
More information on this project will be added with time if it gets enough traction from the community and meanwhile, of course, your suggestions, questions and critics are most welcome.&lt;/div&gt;
&lt;/div&gt;
&amp;lt;/form&amp;gt;</description><author>ZiadJ</author><pubDate>Mon, 19 Sep 2011 22:44:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: TestHome 20110919104449P</guid></item><item><title>Source code checked in, #68503</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68503</link><description>Fixed a bug where the HttpContext was not retrieved when used asynchronously.&amp;#13;&amp;#10;</description><author>ZiadJ</author><pubDate>Thu, 07 Jul 2011 00:03:51 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68503 20110707120351A</guid></item><item><title>Source code checked in, #68502</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68502</link><description>- Fixed a bug where the default value was not returned when no value was found for derivatives of the StorageBase class&amp;#13;&amp;#10;- Fixed a bug where QueryStringBuilder.Append function did not update the internal value.&amp;#13;&amp;#10;</description><author>ZiadJ</author><pubDate>Wed, 06 Jul 2011 23:42:49 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68502 20110706114249P</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Note that this version however is about to be replaced by the upcoming version 2.0b. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it since the counterpart DynamicStore&amp;lt;int&amp;gt; can be used instead. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Tue, 05 Jul 2011 16:36:54 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110705043654P</guid></item><item><title>Released: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>
&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br&gt;
- Modified methods associated with the server cookie to better use the shared ability.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Update:&lt;/b&gt; Note that this version however is about to be replaced by the upcoming version 2.0b. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive
 variable types like Local.Integer have also been removed in it since the counterpart DynamicStore&amp;lt;int&amp;gt; can be used instead. The latest changeset is available here:&lt;br&gt;
&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Tue, 05 Jul 2011 16:36:54 GMT</pubDate><guid isPermaLink="false">Released: Univar 1.4.5 (Jan 23, 2010) 20110705043654P</guid></item><item><title>Source code checked in, #68397</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68397</link><description></description><author>ZiadJ</author><pubDate>Tue, 05 Jul 2011 01:06:39 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68397 20110705010639A</guid></item><item><title>Source code checked in, #68396</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68396</link><description>Minor changes&amp;#13;&amp;#10;</description><author>ZiadJ</author><pubDate>Tue, 05 Jul 2011 01:05:13 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68396 20110705010513A</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;Note that this version however is about to be replaced by the upcoming version 2.0b. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it since the counterpart DynamicStore&amp;lt;int&amp;gt; can be used instead. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Tue, 05 Jul 2011 00:23:29 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110705122329A</guid></item><item><title>Released: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>
&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br&gt;
- Modified methods associated with the server cookie to better use the shared ability.&lt;br&gt;
&lt;br&gt;
Note that this version however is about to be replaced by the upcoming version 2.0b. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable
 types like Local.Integer have also been removed in it since the counterpart DynamicStore&amp;lt;int&amp;gt; can be used instead. The latest changeset is available here:&lt;br&gt;
&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Tue, 05 Jul 2011 00:23:29 GMT</pubDate><guid isPermaLink="false">Released: Univar 1.4.5 (Jan 23, 2010) 20110705122329A</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;Note that this version however is about to be replaced by the upcoming version 2.0b. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it since its counterpart DynamicStore&amp;lt;T&amp;gt; can be used instead. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Tue, 05 Jul 2011 00:12:57 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110705121257A</guid></item><item><title>Source code checked in, #68394</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68394</link><description>- Made the GetValue, SetValue and PlainValue abstract in the StoreBase class.&amp;#13;&amp;#10;</description><author>ZiadJ</author><pubDate>Mon, 04 Jul 2011 23:51:59 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68394 20110704115159P</guid></item><item><title>Source code checked in, #68253</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68253</link><description></description><author>ZiadJ</author><pubDate>Thu, 30 Jun 2011 02:31:14 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68253 20110630023114A</guid></item><item><title>Source code checked in, #68251</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68251</link><description></description><author>ZiadJ</author><pubDate>Thu, 30 Jun 2011 01:11:05 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68251 20110630011105A</guid></item><item><title>Source code checked in, #68250</title><link>http://univar.codeplex.com/SourceControl/changeset/changes/68250</link><description>- Added method Clear, function KeyExists and property PlainValue to the StorageBase class.&amp;#13;&amp;#10;- Implemented the PlainValue property in all inheriting classes.&amp;#13;&amp;#10;- Further refactoring in the DynamicStore class.&amp;#13;&amp;#10;</description><author>ZiadJ</author><pubDate>Thu, 30 Jun 2011 00:51:14 GMT</pubDate><guid isPermaLink="false">Source code checked in, #68250 20110630125114A</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;Note that this version however is about to be replaced by the upcoming version 2.0. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it since its counterpart Storage.DynamicStore&amp;lt;T&amp;gt; can be used instead. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Wed, 29 Jun 2011 03:59:20 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110629035920A</guid></item><item><title>Released: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>
&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br&gt;
- Modified methods associated with the server cookie to better use the shared ability.&lt;br&gt;
&lt;br&gt;
Note that this version however is about to be replaced by the upcoming version 2.0. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types
 like Local.Integer have also been removed in it since its counterpart Storage.DynamicStore&amp;lt;T&amp;gt; can be used instead. The latest changeset is available here:&lt;br&gt;
&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</description><author></author><pubDate>Wed, 29 Jun 2011 03:59:20 GMT</pubDate><guid isPermaLink="false">Released: Univar 1.4.5 (Jan 23, 2010) 20110629035920A</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;Note that this version however is about to be replaced by the upcoming version 2.0. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it in favor of its new counterpart Storage.DynamicStore&amp;lt;int&amp;gt;. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Wed, 29 Jun 2011 03:57:44 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110629035744A</guid></item><item><title>Updated Release: Univar 1.4.5 (Jan 23, 2010)</title><link>http://univar.codeplex.com/releases/view/39251</link><description>&lt;div class="wikidoc"&gt;- Keys used by the PersistentProperty object now include the page path so as to avoid ambiguity amongst similarly named controls in different pages.&lt;br /&gt;- Modified methods associated with the server cookie to better use the shared ability.&lt;br /&gt;&lt;br /&gt;Note that this version however is about to be replaced by the upcoming version 2.0. One of the most noticeable changes in it are that classes Local and Var have been renamed to Storage and DynamicStore respectively. Classes representing primitive variable types like Local.Integer have also been removed in it. The latest changeset is available here:&lt;br /&gt;&lt;a href="http://univar.codeplex.com/SourceControl/list/changesets" class="externalLink"&gt;http://univar.codeplex.com/SourceControl/list/changesets&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>ZiadJ</author><pubDate>Wed, 29 Jun 2011 03:53:21 GMT</pubDate><guid isPermaLink="false">Updated Release: Univar 1.4.5 (Jan 23, 2010) 20110629035321A</guid></item></channel></rss>
