/// <summary>
        /// Parse the PropertyRow structure.
        /// </summary>
        /// <param name="s">A stream containing the PropertyRow structure</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.Flag = ReadByte();
            List<object> tempPropArray = new List<object>();
            foreach (PropertyTag tempPropTag in PropTags)
            {
                object rowPropValue = null;

                if (this.Flag == 0x00)
                {
                    if (tempPropTag.PropertyType != PropertyDataType.PtypUnspecified)
                    {
                        PropertyValue propValue = new PropertyValue(tempPropTag.PropertyType);
                        propValue.Parse(s);
                        rowPropValue = propValue;
                    }
                    else
                    {
                        TypedPropertyValue typePropValue = new TypedPropertyValue();
                        typePropValue.Parse(s);
                        rowPropValue = typePropValue;
                    }
                }
                else if (Flag == 0x01)
                {
                    if (tempPropTag.PropertyType != PropertyDataType.PtypUnspecified)
                    {
                        FlaggedPropertyValue flagPropValue = new FlaggedPropertyValue(tempPropTag.PropertyType);
                        flagPropValue.Parse(s);
                        rowPropValue = flagPropValue;
                    }
                    else
                    {
                        FlaggedPropertyValueWithType flagPropValue = new FlaggedPropertyValueWithType();
                        flagPropValue.Parse(s);
                        rowPropValue = flagPropValue;
                    }
                }
                tempPropArray.Add(rowPropValue);
            }
            this.ValueArray = tempPropArray.ToArray();
        }