diff --git a/BurnOutSharp.Wrappers/AACSMediaKeyBlock.cs b/BurnOutSharp.Wrappers/AACSMediaKeyBlock.cs
index d829f9bb..997adab9 100644
--- a/BurnOutSharp.Wrappers/AACSMediaKeyBlock.cs
+++ b/BurnOutSharp.Wrappers/AACSMediaKeyBlock.cs
@@ -268,6 +268,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_mediaKeyBlock, _jsonSerializerOptions);
+
+#endif
+
#endregion
}
}
\ No newline at end of file
diff --git a/BurnOutSharp.Wrappers/BDPlusSVM.cs b/BurnOutSharp.Wrappers/BDPlusSVM.cs
index e16a1a1b..f9b00d73 100644
--- a/BurnOutSharp.Wrappers/BDPlusSVM.cs
+++ b/BurnOutSharp.Wrappers/BDPlusSVM.cs
@@ -126,6 +126,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_svm, _jsonSerializerOptions);
+
+#endif
+
#endregion
}
}
\ No newline at end of file
diff --git a/BurnOutSharp.Wrappers/BFPK.cs b/BurnOutSharp.Wrappers/BFPK.cs
index 9ef99f47..5e31bd41 100644
--- a/BurnOutSharp.Wrappers/BFPK.cs
+++ b/BurnOutSharp.Wrappers/BFPK.cs
@@ -235,6 +235,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_archive, _jsonSerializerOptions);
+
+#endif
+
#endregion
}
}
\ No newline at end of file
diff --git a/BurnOutSharp.Wrappers/BSP.cs b/BurnOutSharp.Wrappers/BSP.cs
index 32249d6c..9d43e3a7 100644
--- a/BurnOutSharp.Wrappers/BSP.cs
+++ b/BurnOutSharp.Wrappers/BSP.cs
@@ -215,6 +215,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
+
+#endif
+
#endregion
#region Extraction
diff --git a/BurnOutSharp.Wrappers/CFB.cs b/BurnOutSharp.Wrappers/CFB.cs
index 344c2cf8..49e11c64 100644
--- a/BurnOutSharp.Wrappers/CFB.cs
+++ b/BurnOutSharp.Wrappers/CFB.cs
@@ -487,6 +487,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_binary, _jsonSerializerOptions);
+
+#endif
+
#endregion
}
}
\ No newline at end of file
diff --git a/BurnOutSharp.Wrappers/CIA.cs b/BurnOutSharp.Wrappers/CIA.cs
index ec32a248..af4590a1 100644
--- a/BurnOutSharp.Wrappers/CIA.cs
+++ b/BurnOutSharp.Wrappers/CIA.cs
@@ -705,6 +705,13 @@ namespace BurnOutSharp.Wrappers
Console.WriteLine();
}
+#if NET6_0_OR_GREATER
+
+ ///
+ public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cia, _jsonSerializerOptions);
+
+#endif
+
#endregion
}
}
\ No newline at end of file
diff --git a/BurnOutSharp.Wrappers/ConcreteInterfaceSerializer.cs b/BurnOutSharp.Wrappers/ConcreteInterfaceSerializer.cs
new file mode 100644
index 00000000..d2091e2a
--- /dev/null
+++ b/BurnOutSharp.Wrappers/ConcreteInterfaceSerializer.cs
@@ -0,0 +1,82 @@
+#if NET6_0_OR_GREATER
+using System;
+using System.Reflection;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace BurnOutSharp.Wrappers
+{
+ ///
+ /// Serializer class for abstract classes
+ ///
+ ///
+ internal class ConcreteAbstractSerializer : JsonConverterFactory
+ {
+ public override bool CanConvert(Type typeToConvert) => typeToConvert.IsAbstract;
+
+ class ConcreteAbstractSerializerOfType : JsonConverter
+ {
+ static ConcreteAbstractSerializerOfType()
+ {
+ if (!typeof(TAbstract).IsAbstract && !typeof(TAbstract).IsInterface)
+ throw new NotImplementedException(string.Format("Concrete class {0} is not supported", typeof(TAbstract)));
+ }
+
+ public override TAbstract? Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) =>
+ throw new NotImplementedException();
+
+ public override void Write(System.Text.Json.Utf8JsonWriter writer, TAbstract value, System.Text.Json.JsonSerializerOptions options) =>
+ JsonSerializer.Serialize