public void CalculateFixedSerializationLength() { if (calculatedFixedSerializationLength) { throw new InvalidOperationException( "Cannot calculate FixedSerializationLength after it has already been calculated"); } UInt32 length = 0; for (int i = 0; i < fields.Count; i++) { ObjectDefinitionField field = fields[i]; TypeReference fieldTypeReference = field.typeReference; UInt32 fieldFixedSerializationLength = fieldTypeReference.FixedElementSerializationLength; if (fieldFixedSerializationLength == UInt32.MaxValue) { this.fixedSerializationLength = UInt32.MaxValue; calculatedFixedSerializationLength = true; return; } PdlArrayType arrayType = fieldTypeReference.arrayType; if (arrayType == null) { length += fieldFixedSerializationLength; } else { if (arrayType.type != PdlArraySizeTypeEnum.Fixed) { this.fixedSerializationLength = UInt32.MaxValue; calculatedFixedSerializationLength = true; return; } length += arrayType.GetFixedArraySize() * fieldFixedSerializationLength; } } this.fixedSerializationLength = length; calculatedFixedSerializationLength = true; }