diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyException.cs b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyException.cs
new file mode 100644
index 0000000..246b925
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyException.cs
@@ -0,0 +1,16 @@
+// ----------------------------------------------------------------------------------
+// Copyright (c) The Standard Organization: A coalition of the Good-Hearted Engineers
+// ----------------------------------------------------------------------------------
+
+using STX.Serialization.Providers.Abstractions.Models.Exceptions;
+using Xeptions;
+
+namespace STX.Serialization.Providers.Abstractions.Tests.Unit.Models.Exceptions
+{
+ internal class TestDependencyException : Xeption, ISerializationDependencyException
+ {
+ public TestDependencyException(string message, Xeption innerException)
+ : base(message, innerException)
+ { }
+ }
+}
diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyValidationException.cs b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyValidationException.cs
new file mode 100644
index 0000000..f56dc90
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestDependencyValidationException.cs
@@ -0,0 +1,16 @@
+// ----------------------------------------------------------------------------------
+// Copyright (c) The Standard Organization: A coalition of the Good-Hearted Engineers
+// ----------------------------------------------------------------------------------
+
+using STX.Serialization.Providers.Abstractions.Models.Exceptions;
+using Xeptions;
+
+namespace STX.Serialization.Providers.Abstractions.Tests.Unit.Models.Exceptions
+{
+ internal class TestDependencyValidationException : Xeption, ISerializationDependencyValidationException
+ {
+ public TestDependencyValidationException(string message, Xeption innerException)
+ : base(message, innerException)
+ { }
+ }
+}
diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestServiceException.cs b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestServiceException.cs
new file mode 100644
index 0000000..e0de5e2
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestServiceException.cs
@@ -0,0 +1,16 @@
+// ----------------------------------------------------------------------------------
+// Copyright (c) The Standard Organization: A coalition of the Good-Hearted Engineers
+// ----------------------------------------------------------------------------------
+
+using STX.Serialization.Providers.Abstractions.Models.Exceptions;
+using Xeptions;
+
+namespace STX.Serialization.Providers.Abstractions.Tests.Unit.Models.Exceptions
+{
+ internal class TestServiceException : Xeption, ISerializationServiceException
+ {
+ public TestServiceException(string message, Xeption innerException)
+ : base(message, innerException)
+ { }
+ }
+}
diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestValidationException.cs b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestValidationException.cs
new file mode 100644
index 0000000..c09563b
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/Models/Exceptions/TestValidationException.cs
@@ -0,0 +1,16 @@
+// ----------------------------------------------------------------------------------
+// Copyright (c) The Standard Organization: A coalition of the Good-Hearted Engineers
+// ----------------------------------------------------------------------------------
+
+using STX.Serialization.Providers.Abstractions.Models.Exceptions;
+using Xeptions;
+
+namespace STX.Serialization.Providers.Abstractions.Tests.Unit.Models.Exceptions
+{
+ internal class TestValidationException : Xeption, ISerializationValidationException
+ {
+ public TestValidationException(string message, Xeption innerException)
+ : base(message, innerException)
+ { }
+ }
+}
diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/STX.Serialization.Providers.Abstractions.Tests.Unit.csproj b/STX.Serialization.Providers.Abstractions.Tests.Unit/STX.Serialization.Providers.Abstractions.Tests.Unit.csproj
new file mode 100644
index 0000000..6ca9d95
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/STX.Serialization.Providers.Abstractions.Tests.Unit.csproj
@@ -0,0 +1,31 @@
+
+
+
+ net8.0
+ disable
+ disable
+ false
+ true
+
+
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/STX.Serialization.Providers.Abstractions.Tests.Unit/SerializationAbstractionProviderTests.Exceptions.Serialize.cs b/STX.Serialization.Providers.Abstractions.Tests.Unit/SerializationAbstractionProviderTests.Exceptions.Serialize.cs
new file mode 100644
index 0000000..9912953
--- /dev/null
+++ b/STX.Serialization.Providers.Abstractions.Tests.Unit/SerializationAbstractionProviderTests.Exceptions.Serialize.cs
@@ -0,0 +1,231 @@
+// ----------------------------------------------------------------------------------
+// Copyright (c) The Standard Organization: A coalition of the Good-Hearted Engineers
+// ----------------------------------------------------------------------------------
+
+using System;
+using System.Threading.Tasks;
+using FluentAssertions;
+using Moq;
+using STX.Serialization.Providers.Abstractions.Models.Exceptions;
+using STX.Serialization.Providers.Abstractions.Tests.Unit.Models.Exceptions;
+using Xeptions;
+using Xunit;
+
+namespace STX.Serialization.Providers.Abstractions.Tests.Unit
+{
+ public partial class SerializationAbstractionProviderTests
+ {
+ [Fact]
+ public async Task ShouldCaptureAndLocaliseValidationExceptionsAsync()
+ {
+ // given
+ dynamic dynamicPerson = new
+ {
+ Name = GetRandomString(),
+ Surname = GetRandomString(),
+ Age = GetRandomNumber()
+ };
+
+ dynamic inputPerson = dynamicPerson;
+ Xeption someException = new Xeption(message: "Some exception occurred.");
+
+ TestValidationException testValidationException =
+ new TestValidationException(
+ message: "Serialization validation errors occurred, please try again.",
+ innerException: someException);
+
+ SerializationValidationProviderException expectedSerializationValidationProviderException =
+ new SerializationValidationProviderException(
+ message: "Serialization validation errors occurred, please try again.",
+ innerException: testValidationException,
+ data: testValidationException.Data);
+
+ this.serializationProviderMock.Setup(provider =>
+ provider.Serialize(It.IsAny