static void Serialize(ISerializerFacade serializer, TestCase testCase)
    {
        var testInstance = serializer.CreateInstance(testCase.MessageType);

        testCase.Populate(testInstance);

        var testCaseFolder = GetTestCaseFolder(testCase, serializer.SerializationFormat);

        var fileName = GetFileName(testCaseFolder, serializer.SerializationFormat.ToString("G").ToLower());

        using (var stream = new FileStream(fileName, FileMode.Create))
        {
            serializer.Serialize(stream, testInstance);
            stream.Flush(true);
        }
    }
    static void DeserializeAndVerify(ISerializerFacade serializer, TestCase testCase)
    {
        var expectedValues = serializer.CreateInstance(testCase.MessageType);

        testCase.Populate(expectedValues);

        var testCaseFolder = GetTestCaseFolder(testCase, serializer.SerializationFormat);
        var files          = Directory.GetFiles(testCaseFolder);

        if (files.Length == 0)
        {
            throw new Exception(
                      "No available files to deserialize. Make sure to run the serialization test case first.");
        }

        foreach (var filePath in files)
        {
            string fileName = Path.GetFileName(filePath);
            if (ExcludeList.Contains(testCase, fileName))
            {
                Console.WriteLine($"\tSkipping {fileName} because it was excluded");
                continue;
            }

            using (var stream = new FileStream(filePath, FileMode.Open))
            {
                try
                {
                    Console.WriteLine($"\tDeserializing {fileName}");
                    var deserializedType = serializer.Deserialize(stream).First();
                    testCase.CheckIfAreEqual(deserializedType, expectedValues);
                }
                catch (Exception e) when(e is not AssertionException)
                {
                    Console.WriteLine("\tError: " + e.Message);
                    Assert.Fail($"Failed deserializing {testCase.GetType().Name} - {fileName}: {e}");
                }
            }
        }
    }