Object Data
Inheritance: StreamObject
        /// <summary>
        /// Used to return the length of this element.
        /// </summary>
        /// <param name="byteArray">A Byte array</param>
        /// <param name="startIndex">Start position</param>
        /// <returns>The length of the element</returns>
        public override int DeserializeDataElementDataFromByteArray(byte[] byteArray, int startIndex)
        {
            int index = startIndex;

            DataElementHash dataElementHash;

            if (StreamObject.TryGetCurrent <DataElementHash>(byteArray, ref index, out dataElementHash))
            {
                this.DataElementHash = dataElementHash;
            }

            this.ObjectGroupDeclarations = StreamObject.GetCurrent <ObjectGroupDeclarations>(byteArray, ref index);

            ObjectGroupMetadataDeclarations objectMetadataDeclaration = new ObjectGroupMetadataDeclarations();

            if (StreamObject.TryGetCurrent <ObjectGroupMetadataDeclarations>(byteArray, ref index, out objectMetadataDeclaration))
            {
                this.ObjectMetadataDeclaration = objectMetadataDeclaration;
            }

            this.ObjectGroupData = StreamObject.GetCurrent <ObjectGroupData>(byteArray, ref index);

            return(index - startIndex);
        }
        /// <summary>
        /// Used to return the length of this element.
        /// </summary>
        /// <param name="byteArray">A Byte array</param>
        /// <param name="startIndex">Start position</param>
        /// <returns>The length of the element</returns>
        public override int DeserializeDataElementDataFromByteArray(byte[] byteArray, int startIndex)
        {
            int index = startIndex;

            DataElementHash dataElementHash;
            if (StreamObject.TryGetCurrent<DataElementHash>(byteArray, ref index, out dataElementHash))
            {
                this.DataElementHash = dataElementHash;
            }

            this.ObjectGroupDeclarations = StreamObject.GetCurrent<ObjectGroupDeclarations>(byteArray, ref index);

            ObjectGroupMetadataDeclarations objectMetadataDeclaration = new ObjectGroupMetadataDeclarations();
            if (StreamObject.TryGetCurrent<ObjectGroupMetadataDeclarations>(byteArray, ref index, out objectMetadataDeclaration))
            {
                this.ObjectMetadataDeclaration = objectMetadataDeclaration;
            }

            this.ObjectGroupData = StreamObject.GetCurrent<ObjectGroupData>(byteArray, ref index);

            return index - startIndex;
        }
        /// <summary>
        /// This method is used to test object group data related adapter requirements.
        /// </summary>
        /// <param name="instance">Specify the instance which need to be verified.</param> 
        /// <param name="site">Specify the ITestSite instance.</param>
        public void VerifyObjectGroupData(ObjectGroupData instance, ITestSite site)
        {
            // If the instance is not null and there are no parsing errors, then the ObjectGroupData related adapter requirements can be directly captured.
            if (null == instance)
            {
                site.Assert.Fail("The instance of type ObjectGroupData is null due to parsing error or type casting error.");
            }

            // Verify the stream object header related requirements.
            this.ExpectStreamObjectHeaderStart(instance.StreamObjectHeaderStart, instance.GetType(), site);

            // Directly capture requirement MS-FSSHTTPB_R311, if there are no parsing errors. 
            site.CaptureRequirement(
                     "MS-FSSHTTPB",
                     311,
                     @"[In Object Group Data Elements] Object Group Data Start (variable): A 16-bit or 32-bit stream object header that specifies an object group data start.");

            if (instance.ObjectGroupObjectDataList != null && instance.ObjectGroupObjectDataList.Count != 0)
            {
                // Directly capture requirement MS-FSSHTTPB_R312, if there are no parsing errors. 
                site.CaptureRequirement(
                         "MS-FSSHTTPB",
                         312,
                         @"[In Object Group Data Elements] Object Data (variable): An optional array of object data (section 2.2.1.12.6.4) that specifies the object data.");
            }
            
            if (instance.ObjectGroupObjectDataBLOBReferenceList != null && instance.ObjectGroupObjectDataBLOBReferenceList.Count != 0)
            {
                // Directly capture requirement MS-FSSHTTPB_R3121, if there are no parsing errors. 
                site.CaptureRequirement(
                         "MS-FSSHTTPB",
                         3121,
                         @"[In Object Group Data Elements] Object Data BLOB Reference (variable): An optional array of object data BLOB references (section 2.2.1.12.6.5) that specifies the object data's references.");
            }

            // Verify the stream object header end related requirements.
            this.ExpectStreamObjectHeaderEnd(instance.StreamObjectHeaderEnd, instance.GetType(), site);
            this.ExpectCompoundObject(instance.StreamObjectHeaderStart, site);

            // Capture requirement MS-FSSHTTPB_R313, if the stream object end is StreamObjectHeaderEnd8bit.
            site.CaptureRequirementIfAreEqual<Type>(
                     typeof(StreamObjectHeaderEnd8bit),
                     instance.StreamObjectHeaderEnd.GetType(),
                     "MS-FSSHTTPB",
                     313,
                     @"[In Object Group Data Elements] Object Group Data End (1 byte): An 8-bit stream object header that specifies an object group data end.");
        }