public void CanHandleEmptyExpression()
        {
            // Arrange
            string s = "MyHashtable.A=1&";

            // Act
            NestedDataWithDictionaries data = Deserialize <NestedDataWithDictionaries>(s);

            // Assert
            Assert.AreEqual("1", data.MyHashtable["A"]);
        }
        public void CanDeserializeNestedTypedDataWithCollections()
        {
            // Arrange
            string s = @"
MyDictionaryStringNested.A.MyNameValueCollection.Z=30&
MyDictionaryStringNested.X.MyInt=10&
MyDictionaryStringNested.Y.MyInt=20&
MyDictionaryStringString.X=1&
MyDictionaryStringString.Y=2&
MyDictionaryStringString.X.Q=3&
MyNameValueCollection.K1.K2=5&
MyNameValueCollection.K1.K3=6&
MyNameValueCollection.K1=7&
MyNameValueCollection.X=8&
MyHashtable.A.X.1=1&
MyHashtable.A.Y.2=Q";

            // Act
            NestedDataWithDictionaries data = Deserialize <NestedDataWithDictionaries>(s);

            // Assert
            Assert.IsInstanceOf <Hashtable>(data.MyHashtable["A"]);
            Hashtable a = (Hashtable)data.MyHashtable["A"];

            Assert.AreEqual("1", ((Hashtable)a["X"])["1"]);
            Assert.AreEqual("Q", ((Hashtable)a["Y"])["2"]);

            Assert.IsInstanceOf <NameValueCollection>(data.MyNameValueCollection);
            Assert.AreEqual("5", data.MyNameValueCollection["K1.K2"]);
            Assert.AreEqual("6", data.MyNameValueCollection["K1.K3"]);
            Assert.AreEqual("7", data.MyNameValueCollection["K1"]);
            Assert.AreEqual("8", data.MyNameValueCollection["X"]);

            Assert.IsNotNull(data.MyDictionaryStringString);
            Assert.AreEqual("1", data.MyDictionaryStringString["X"]);
            Assert.AreEqual("2", data.MyDictionaryStringString["Y"]);
            Assert.AreEqual("3", data.MyDictionaryStringString["X.Q"]);

            Assert.IsNotNull(data.MyDictionaryStringNested);
            Assert.IsNotNull(data.MyDictionaryStringNested["X"]);
            Assert.AreEqual(10, data.MyDictionaryStringNested["X"].MyInt);
            Assert.AreEqual(20, data.MyDictionaryStringNested["Y"].MyInt);
            Assert.AreEqual("30", data.MyDictionaryStringNested["A"].MyNameValueCollection["Z"]);
        }