public void ParseReferenceFields()
        {
            var random = new Random();
            var source = new SimpleFieldsWithReference {
                DateTimeValue = DateTime.Now,
                DecimalValue = new Decimal(random.NextDouble() * 100),
                GuidValue = Guid.NewGuid(),
                Another = new SimpleFields {
                    DateTimeValue = DateTime.UtcNow,
                    DecimalValue = new Decimal(random.NextDouble() * 100),
                    GuidValue = Guid.NewGuid()
                }
            };

            var target = Parse(source);
            var outer = typeof(SimpleFieldsWithReference);
            Assert.That(target.AssemblyName, Is.EqualTo(outer.Assembly.GetName().ToString()));
            Assert.That(target.TypeName, Is.EqualTo(outer.Namespace + "." + outer.DeclaringType.Name + "+" + outer.Name));
            Assert.That(target["DateTimeValue"], Is.EqualTo(source.DateTimeValue));
            Assert.That(target["DecimalValue"], Is.EqualTo(source.DecimalValue));
            Assert.That(target["GuidValue"], Is.EqualTo(source.GuidValue));

            var anotherObj = target["Another"];
            Assert.That(anotherObj, Is.InstanceOf<ObjectValues>());

            var another = anotherObj as ObjectValues;
            var inner = typeof(SimpleFields);
            Assert.That(another.AssemblyName, Is.EqualTo(inner.Assembly.GetName().ToString()));
            Assert.That(another.TypeName, Is.EqualTo(inner.Namespace + "." + inner.DeclaringType.Name + "+" + inner.Name));
            Assert.That(another["DateTimeValue"], Is.EqualTo(source.Another.DateTimeValue));
            Assert.That(another["DecimalValue"], Is.EqualTo(source.Another.DecimalValue));
            Assert.That(another["GuidValue"], Is.EqualTo(source.Another.GuidValue));
        }
        public void ParseObjectNull()
        {
            var source = new SimpleFieldsWithReference();

            var target = Parse(source);
            Assert.That(target["Another"], Is.Null);
        }