//separate the PropertyContext from the entity name/value for handling collections
        private void WriteEntity(IVgXmlSerializerContext sContext, object entityValue, string entityName, VgXmlEntityType entityType)
        {
            switch (entityType)
            {
            case VgXmlEntityType.Attribute:
                sContext.Writer.WriteAttributeString(entityName, ObjectToString(entityValue));
                break;

            case VgXmlEntityType.Element:
                sContext.Writer.WriteStartElement(entityName);

                if (!(entityValue.GetType().IsPrimitive || entityValue is string))
                {
                    sContext.Serializer.Serialize(sContext.Writer, entityValue);
                }
                else
                {
                    sContext.Writer.WriteValue(ObjectToString(entityValue));
                }

                sContext.Writer.WriteEndElement();
                break;

            case VgXmlEntityType.RawElement:
                sContext.Writer.WriteStartElement(entityName);
                sContext.Writer.WriteRaw(ObjectToString(entityValue));
                sContext.Writer.WriteEndElement();
                break;
            }
        }
        public void EntityType_ReturnsEntityTypeDeclaredInPropertyDecoration(string propertyName, VgXmlEntityType expectedEntityType)
        {
            var property = typeof(TestClass).GetProperty(propertyName);
            var context  = VgXmlPropertyContext.CreateContext(property);

            Assert.That(context.EntityType, Is.EqualTo(expectedEntityType));
        }
        private object ReadEntity(IVgXmlSerializerContext sContext, Type entityValueType, VgXmlEntityType entityType)
        {
            switch (entityType)
            {
            case VgXmlEntityType.Attribute:
                return(StringToObject(sContext.Reader.ReadContentAsString(), entityValueType));

            case VgXmlEntityType.Element:
                if (!(entityValueType.IsPrimitive || entityValueType == typeof(string)))
                {
                    return(sContext.Serializer.Deserialize(sContext.Reader, entityValueType));
                }
                else
                {
                    return(StringToObject(sContext.Reader.ReadString(), entityValueType));
                }

            case VgXmlEntityType.RawElement:
                return(sContext.Reader.ReadOuterXml());
            }

            throw new NotImplementedException(entityType.ToString());
        }