diff --git a/SabreTools.Serialization/XmlSerializer.Serializer.cs b/SabreTools.Serialization/XmlSerializer.Serializer.cs
index 0fa27c80..9e60a817 100644
--- a/SabreTools.Serialization/XmlSerializer.Serializer.cs
+++ b/SabreTools.Serialization/XmlSerializer.Serializer.cs
@@ -15,8 +15,13 @@ namespace SabreTools.Serialization
///
/// Data to serialize
/// Path to the file to serialize to
+ /// Data to serialize
+ /// Optional DOCTYPE name
+ /// Optional DOCTYPE pubid
+ /// Optional DOCTYPE sysid
+ /// Optional DOCTYPE name
/// True on successful serialization, false otherwise
- public static bool SerializeToFile(T? obj, string path)
+ public static bool SerializeToFile(T? obj, string path, string? name = null, string? pubid = null, string? sysid = null, string? subset = null)
{
using var stream = SerializeToStream(obj);
if (stream == null)
@@ -31,8 +36,12 @@ namespace SabreTools.Serialization
/// Serializes the defined type to a stream
///
/// Data to serialize
+ /// Optional DOCTYPE name
+ /// Optional DOCTYPE pubid
+ /// Optional DOCTYPE sysid
+ /// Optional DOCTYPE name
/// Stream containing serialized data on success, null otherwise
- public static Stream? SerializeToStream(T? obj)
+ public static Stream? SerializeToStream(T? obj, string? name = null, string? pubid = null, string? sysid = null, string? subset = null)
{
// If the object is null
if (obj == null)
@@ -52,6 +61,10 @@ namespace SabreTools.Serialization
var streamWriter = new StreamWriter(stream);
var xmlWriter = XmlWriter.Create(streamWriter, settings);
+ // Write the doctype if provided
+ if (!string.IsNullOrWhiteSpace(name))
+ xmlWriter.WriteDocType(name, pubid, sysid, subset);
+
// Perform the deserialization and return
serializer.Serialize(xmlWriter, obj);
stream.Seek(0, SeekOrigin.Begin);