public static bool TryParseBinarySerializationDataItem(byte[] allBytes, int arrayPosition,
                                                                   out BinaryFormatSerializationDataItem serializationDataitem, out int size)
            {
                bool result = false;

                size = 0;
                serializationDataitem = null;
                if (allBytes.Length >= arrayPosition + MinSize)
                {
                    var brandNameLength = BitConverter.ToInt16(allBytes, arrayPosition + DateSize);
                    var supposedSize    = MinSize + brandNameLength * 2;
                    if (allBytes.Length >= arrayPosition + supposedSize)
                    {
                        size = supposedSize;
                        serializationDataitem           = new BinaryFormatSerializationDataItem();
                        serializationDataitem.Day       = BitConverter.ToInt16(allBytes, arrayPosition);
                        serializationDataitem.Month     = BitConverter.ToInt16(allBytes, arrayPosition + sizeof(short));
                        serializationDataitem.Year      = BitConverter.ToInt32(allBytes, arrayPosition + sizeof(short) * 2);
                        serializationDataitem.BrandName = Encoding.Unicode.GetString(allBytes, arrayPosition + DateSize + sizeof(short), brandNameLength * 2);
                        Debug.Assert(brandNameLength == serializationDataitem.BrandNameLength,
                                     $"{nameof(BinaryFormatSerializationDataItem)} byte parser has bug related to {nameof(BrandName)} and/or {nameof(BrandNameLength)} length");
                        serializationDataitem.Price = BitConverter.ToInt32(allBytes, arrayPosition + (MinSize - sizeof(int)) + brandNameLength * 2);
                        result = true;
                    }
                }
                return(result);
            }
        private static bool TryParseBytesManually(byte[] allBytes, out BinaryFormatSerializationData binaryFormatSerializationData)
        {
            Debug.Assert(allBytes != null, "Internal binary parse bytes pre-check for null failed");
            bool result = false;
            BinaryFormatSerializationData tempData = new BinaryFormatSerializationData();

            if (Header == BitConverter.ToInt16(allBytes, 0))
            {
                tempData.RecordsCount = BitConverter.ToUInt16(allBytes, sizeof(ushort));
                tempData.DataItems    = new List <BinaryFormatSerializationDataItem>();
                int parsedItemsSize = MinSize;
                if (tempData.RecordsCount > 0)
                {
                    for (int x = 0; x < tempData.RecordsCount; x++)
                    {
                        int itemSize;
                        BinaryFormatSerializationDataItem serializationDataItem;
                        if (BinaryFormatSerializationDataItem.TryParseBinarySerializationDataItem(allBytes, parsedItemsSize,
                                                                                                  out serializationDataItem, out itemSize))
                        {
                            tempData.DataItems.Add(serializationDataItem);
                            parsedItemsSize += itemSize;
                            if (x == tempData.RecordsCount - 1)
                            {
                                result = true;
                            }
                        }
                        else
                        {
                            tempData = null;
                            break;
                        }
                    }
                }
                else
                {
                    result = true;
                }
            }
            binaryFormatSerializationData = tempData;
            return(result);
        }