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);