public override bool Serialize <TSerializedResource>(KeyedResource owner, ref TSerializedResource[] serializedResources, ref short length, params Type[] expectedTypes)
        {
            var ownerLength     = _offset - owner.Offset;
            var remainingLength = length - ownerLength;
            var buffer          = new byte[remainingLength];

            if (Read(buffer, buffer.Length) != remainingLength)
            {
                return(false);
            }

            using (var subSerializer = new ReadResourceSerializer(new MemoryStream(buffer)))
            {
                var children = new List <TSerializedResource>();
                for (;;)
                {
                    // :frowning:
                    var child = (TSerializedResource)(SerializedResource)subSerializer.SerializeKeyedResource(expectedTypes);
                    if (child == null)
                    {
                        serializedResources = children.ToArray();
                        return(true);
                    }
                    children.Add(child);
                }
            }
        }
        public static TResource Deserialize <TResource>(Stream stream)
            where TResource : SerializedResource, new()
        {
            var deserializer = new ReadResourceSerializer(stream);
            var resource     = new TResource();

            deserializer.Serialize(ref resource);
            return(resource);
        }