public static byte[] Serialize(FileToAssetsMapping[] assetToFileMappings)
        {
            byte[] bytes  = new byte[CacheSerializerUtils.ARRAY_SIZE_OFFSET];
            int    offset = 0;

            CacheSerializerUtils.EncodeShort((short)assetToFileMappings.Length, ref bytes, ref offset);

            foreach (FileToAssetsMapping fileToAssetsMapping in assetToFileMappings)
            {
                CacheSerializerUtils.EncodeLong(fileToAssetsMapping.Timestamp, ref bytes, ref offset);
                CacheSerializerUtils.EncodeString(fileToAssetsMapping.FileId, ref bytes, ref offset);
                CacheSerializerUtils.EncodeShort((short)fileToAssetsMapping.FileNodes.Count, ref bytes, ref offset);

                foreach (FileToAssetMappingNode fileNode in fileToAssetsMapping.FileNodes)
                {
                    CacheSerializerUtils.EncodeString(fileNode.AssetId, ref bytes, ref offset);
                    CacheSerializerUtils.EncodeDependencies(fileNode.Dependencies, ref bytes, ref offset);
                }
            }

            CacheSerializerUtils.EncodeString(EOF, ref bytes, ref offset);

            Deserialize(bytes);

            return(bytes);
        }
        public static byte[] Serialize(FileToAssetNode[] fileToAssetNodes)
        {
            byte[] bytes  = new byte[CacheSerializerUtils.ARRAY_SIZE_OFFSET];
            int    offset = 0;

            CacheSerializerUtils.EncodeShort((short)fileToAssetNodes.Length, ref bytes, ref offset);

            foreach (FileToAssetNode fileToAssetNode in fileToAssetNodes)
            {
                CacheSerializerUtils.EncodeString(fileToAssetNode.FileId, ref bytes, ref offset);
                CacheSerializerUtils.EncodeShort((short)fileToAssetNode.ResolverTimeStamps.Count, ref bytes, ref offset);

                for (int i = 0; i < fileToAssetNode.ResolverTimeStamps.Count; ++i)
                {
                    FileToAssetNode.ResolverTimeStamp resolverTimeStamp = fileToAssetNode.ResolverTimeStamps[i];
                    CacheSerializerUtils.EncodeString(resolverTimeStamp.ResolverId, ref bytes, ref offset);
                    CacheSerializerUtils.EncodeLong(resolverTimeStamp.TimeStamp, ref bytes, ref offset);
                }

                CacheSerializerUtils.EncodeShort((short)fileToAssetNode.AssetNodes.Count, ref bytes, ref offset);

                for (int j = 0; j < fileToAssetNode.AssetNodes.Count; ++j)
                {
                    AssetNode assetNode = fileToAssetNode.AssetNodes[j];
                    CacheSerializerUtils.EncodeString(assetNode.Id, ref bytes, ref offset);

                    CacheSerializerUtils.EncodeShort((short)assetNode.ResolverDatas.Count, ref bytes, ref offset);

                    for (var i = 0; i < assetNode.ResolverDatas.Count; i++)
                    {
                        AssetNode.ResolverData resolverData = assetNode.ResolverDatas[i];

                        CacheSerializerUtils.EncodeString(resolverData.ResolverId, ref bytes, ref offset);
                        CacheSerializerUtils.EncodeDependencies(resolverData.Dependencies, ref bytes, ref offset);

                        bytes = CacheSerializerUtils.EnsureSize(bytes, offset);
                    }
                }
            }

            CacheSerializerUtils.EncodeString(EOF, ref bytes, ref offset);

            Deserialize(bytes);

            return(bytes);
        }