public void DeserializeSimpleObject()
        {
            ReferenceObject robj = new ReferenceObject();
            robj.ID = 0;
            robj.Type = typeof (SomeClass);

            Field nameField = new Field();
            Field ageField = new Field();
            Field parentField = new Field();

            nameField.Name = "name";
            ageField.Name = "age";
            parentField.Name = "parent";

            nameField.Value = NullObject.Default;
            parentField.Value = NullObject.Default;
            ageField.Value = GetIntegerValueObject(55);

            robj.Fields.Add(nameField);
            robj.Fields.Add(ageField);
            robj.Fields.Add(parentField);

            SomeClass res = (SomeClass)robj.GetValue();

            Assert.AreEqual(res.Name,null);
            Assert.AreEqual(res.Parent,null);
            Assert.AreEqual(res.Age, 55);
        }
        private ReferenceObject BuildReferenceObject(object item)
        {
            ReferenceObject current = new ReferenceObject();
            RegisterObject(current, item);

            //let readers of the serialize data know that this should be treated as a list
            if (item is IEnumerable)
                current.IsEnumerable = true;

            Type currentType = item.GetType();
            while (currentType != null)
            {
                FieldInfo[] fields = currentType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
                foreach (FieldInfo fieldInfo in fields)
                {
                    if (IsNonSerialized(fieldInfo))
                        continue;

                    Field field = new Field();
                    current.Fields.Add(field);
                    field.Name = fieldInfo.Name;
                    object fieldValue = fieldInfo.GetValue(item);
                    field.Value = GetObject(fieldValue);
                }
                currentType = currentType.BaseType;
            }

            return current;
        }
        private ReferenceObject BuildReferenceObject(object item)
        {
            ReferenceObject current = new ReferenceObject();
            RegisterObject(current, item);

            //let readers of the serialize data know that this should be treated as a list
            if (item is IEnumerable)
                current.IsEnumerable = true;

            FieldInfo[] fields =
                item.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
            foreach (FieldInfo field in fields)
            {
                if (IsNonSerialized(field))
                    continue;

                Field property = new Field();
                current.Fields.Add(property);
                property.Name = field.Name;
                object fieldValue = field.GetValue(item);
                property.Value = GetObject(fieldValue);
            }

            return current;
        }