diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index 694323c1..ec9e388e 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -130,7 +130,6 @@ namespace SabreTools.DatFiles.Formats break; } - // TODO: Check required fields return missingFields; } diff --git a/SabreTools.Serialization/Logiqx.cs b/SabreTools.Serialization/Logiqx.cs index 556b0c09..84923351 100644 --- a/SabreTools.Serialization/Logiqx.cs +++ b/SabreTools.Serialization/Logiqx.cs @@ -1,7 +1,38 @@ +using System.IO; + namespace SabreTools.Serialization { /// /// XML deserializer for Logiqx-derived metadata files /// - public class Logiqx : XmlSerializer { } + public class Logiqx : XmlSerializer + { + /// + /// name field for DOCTYPE + /// + public const string? DocTypeName = "datafile"; + + /// + /// pubid field for DOCTYPE + /// + public const string? DocTypePubId = "-//Logiqx//DTD ROM Management Datafile//EN"; + + /// + /// sysid field for DOCTYPE + /// + public const string? DocTypeSysId = "http://www.logiqx.com/Dats/datafile.dtd"; + + /// + /// subset field for DOCTYPE + /// + public const string? DocTypeSubset = null; + + /// + public static bool SerializeToFileWithDocType(Models.Logiqx.Datafile obj, string path) + => SerializeToFile(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + + /// + public static Stream? SerializeToStreamWithDocType(Models.Logiqx.Datafile obj, string path) + => SerializeToStream(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + } } \ No newline at end of file diff --git a/SabreTools.Serialization/OpenMSX.cs b/SabreTools.Serialization/OpenMSX.cs index 2f88c0eb..17d94692 100644 --- a/SabreTools.Serialization/OpenMSX.cs +++ b/SabreTools.Serialization/OpenMSX.cs @@ -1,7 +1,38 @@ +using System.IO; + namespace SabreTools.Serialization { /// /// XML deserializer for OpenMSX software database files /// - public class OpenMSX : XmlSerializer { } + public class OpenMSX : XmlSerializer + { + /// + /// name field for DOCTYPE + /// + public const string? DocTypeName = "softwaredb"; + + /// + /// pubid field for DOCTYPE + /// + public const string? DocTypePubId = null; + + /// + /// sysid field for DOCTYPE + /// + public const string? DocTypeSysId = "softwaredb1.dtd"; + + /// + /// subset field for DOCTYPE + /// + public const string? DocTypeSubset = null; + + /// + public static bool SerializeToFileWithDocType(Models.OpenMSX.SoftwareDb obj, string path) + => SerializeToFile(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + + /// + public static Stream? SerializeToStreamWithDocType(Models.OpenMSX.SoftwareDb obj, string path) + => SerializeToStream(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + } } \ No newline at end of file diff --git a/SabreTools.Serialization/SoftwareList.cs b/SabreTools.Serialization/SoftwareList.cs index 00e062f6..68f9f451 100644 --- a/SabreTools.Serialization/SoftwareList.cs +++ b/SabreTools.Serialization/SoftwareList.cs @@ -1,7 +1,38 @@ +using System.IO; + namespace SabreTools.Serialization { /// /// XML deserializer for MAME softwarelist files /// - public class SoftawreList : XmlSerializer { } + public class SoftawreList : XmlSerializer + { + /// + /// name field for DOCTYPE + /// + public const string? DocTypeName = "softwarelist"; + + /// + /// pubid field for DOCTYPE + /// + public const string? DocTypePubId = null; + + /// + /// sysid field for DOCTYPE + /// + public const string? DocTypeSysId = "softwarelist.dtd"; + + /// + /// subset field for DOCTYPE + /// + public const string? DocTypeSubset = null; + + /// + public static bool SerializeToFileWithDocType(Models.SoftwareList.SoftwareList obj, string path) + => SerializeToFile(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + + /// + public static Stream? SerializeToStreamWithDocType(Models.SoftwareList.SoftwareList obj, string path) + => SerializeToStream(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + } } \ No newline at end of file diff --git a/SabreTools.Serialization/XmlSerializer.Serializer.cs b/SabreTools.Serialization/XmlSerializer.Serializer.cs index 9e60a817..8aff4502 100644 --- a/SabreTools.Serialization/XmlSerializer.Serializer.cs +++ b/SabreTools.Serialization/XmlSerializer.Serializer.cs @@ -10,6 +10,16 @@ namespace SabreTools.Serialization /// public abstract partial class XmlSerializer { + /// + /// Serializes the defined type to an XML file + /// + /// Data to serialize + /// Path to the file to serialize to + /// Data to serialize + /// True on successful serialization, false otherwise + public static bool SerializeToFile(T? obj, string path) + => SerializeToFile(obj, path, null, null, null, null); + /// /// Serializes the defined type to an XML file /// @@ -21,9 +31,9 @@ namespace SabreTools.Serialization /// Optional DOCTYPE sysid /// Optional DOCTYPE name /// True on successful serialization, false otherwise - public static bool SerializeToFile(T? obj, string path, string? name = null, string? pubid = null, string? sysid = null, string? subset = null) + protected static bool SerializeToFile(T? obj, string path, string? name = null, string? pubid = null, string? sysid = null, string? subset = null) { - using var stream = SerializeToStream(obj); + using var stream = SerializeToStream(obj, name, pubid, sysid, subset); if (stream == null) return false; @@ -32,6 +42,14 @@ namespace SabreTools.Serialization return true; } + /// + /// Serializes the defined type to a stream + /// + /// Data to serialize + /// Stream containing serialized data on success, null otherwise + public static Stream? SerializeToStream(T? obj) + => SerializeToStream(obj, null, null, null, null); + /// /// Serializes the defined type to a stream /// @@ -41,7 +59,7 @@ namespace SabreTools.Serialization /// Optional DOCTYPE sysid /// Optional DOCTYPE name /// Stream containing serialized data on success, null otherwise - public static Stream? SerializeToStream(T? obj, string? name = null, string? pubid = null, string? sysid = null, string? subset = null) + protected 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) @@ -70,5 +88,6 @@ namespace SabreTools.Serialization stream.Seek(0, SeekOrigin.Begin); return stream; } + } } \ No newline at end of file