diff --git a/SabreTools.Models/OpenMSX/Dump.cs b/SabreTools.Models/OpenMSX/Dump.cs index 8574d4cd..286b521b 100644 --- a/SabreTools.Models/OpenMSX/Dump.cs +++ b/SabreTools.Models/OpenMSX/Dump.cs @@ -9,14 +9,10 @@ namespace SabreTools.Models.OpenMSX [XmlElement("original")] public Original? Original { get; set; } - [XmlElement("rom")] - public Rom? Rom { get; set; } - - [XmlElement("megarom")] - public MegaRom? MegaRom { get; set; } - - [XmlElement("sccpluscart")] - public SCCPlusCart? SCCPlusCart { get; set; } + [XmlElement("rom", typeof(Rom))] + [XmlElement("megarom", typeof(MegaRom))] + [XmlElement("sccpluscart", typeof(SCCPlusCart))] + public RomBase? Rom { get; set; } #region DO NOT USE IN PRODUCTION diff --git a/SabreTools.Models/OpenMSX/MegaRom.cs b/SabreTools.Models/OpenMSX/MegaRom.cs index 828b9657..78fa13ac 100644 --- a/SabreTools.Models/OpenMSX/MegaRom.cs +++ b/SabreTools.Models/OpenMSX/MegaRom.cs @@ -1,30 +1,7 @@ -using System.Xml; using System.Xml.Serialization; namespace SabreTools.Models.OpenMSX { [XmlRoot("megarom")] - public class MegaRom - { - [XmlElement("type")] - public string? Type { get; set; } - - [XmlElement("hash")] - public string? Hash { get; set; } - - [XmlElement("remark")] - public string? Remark { get; set; } - - #region DO NOT USE IN PRODUCTION - - /// Should be empty - [XmlAnyAttribute] - public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; } - - /// Should be empty - [XmlAnyElement] - public object[]? ADDITIONAL_ELEMENTS { get; set; } - - #endregion - } + public class MegaRom : RomBase { } } \ No newline at end of file diff --git a/SabreTools.Models/OpenMSX/Rom.cs b/SabreTools.Models/OpenMSX/Rom.cs index cd837009..bfa03810 100644 --- a/SabreTools.Models/OpenMSX/Rom.cs +++ b/SabreTools.Models/OpenMSX/Rom.cs @@ -1,33 +1,7 @@ -using System.Xml; using System.Xml.Serialization; namespace SabreTools.Models.OpenMSX { [XmlRoot("rom")] - public class Rom - { - [XmlElement("start")] - public string? Start { get; set; } - - [XmlElement("type")] - public string? Type { get; set; } - - [XmlElement("hash")] - public string? Hash { get; set; } - - [XmlElement("remark")] - public string? Remark { get; set; } - - #region DO NOT USE IN PRODUCTION - - /// Should be empty - [XmlAnyAttribute] - public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; } - - /// Should be empty - [XmlAnyElement] - public object[]? ADDITIONAL_ELEMENTS { get; set; } - - #endregion - } + public class Rom : RomBase { } } \ No newline at end of file diff --git a/SabreTools.Models/OpenMSX/RomBase.cs b/SabreTools.Models/OpenMSX/RomBase.cs new file mode 100644 index 00000000..a15d9d02 --- /dev/null +++ b/SabreTools.Models/OpenMSX/RomBase.cs @@ -0,0 +1,35 @@ +using System.Xml; +using System.Xml.Serialization; + +namespace SabreTools.Models.OpenMSX +{ + /// + /// Base class to unify the various rom types + /// + public abstract class RomBase + { + [XmlElement("start")] + public string? Start { get; set; } + + [XmlElement("type")] + public string? Type { get; set; } + + [XmlElement("hash")] + public string? Hash { get; set; } + + [XmlElement("remark")] + public string? Remark { get; set; } + + #region DO NOT USE IN PRODUCTION + + /// Should be empty + [XmlAnyAttribute] + public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; } + + /// Should be empty + [XmlAnyElement] + public object[]? ADDITIONAL_ELEMENTS { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/SabreTools.Models/OpenMSX/SCCPlusCart.cs b/SabreTools.Models/OpenMSX/SCCPlusCart.cs index ad65749e..9d108317 100644 --- a/SabreTools.Models/OpenMSX/SCCPlusCart.cs +++ b/SabreTools.Models/OpenMSX/SCCPlusCart.cs @@ -1,30 +1,7 @@ -using System.Xml; using System.Xml.Serialization; namespace SabreTools.Models.OpenMSX { [XmlRoot("sccpluscart")] - public class SCCPlusCart - { - [XmlElement("boot")] - public string? Boot { get; set; } - - [XmlElement("hash")] - public string? Hash { get; set; } - - [XmlElement("remark")] - public string? Remark { get; set; } - - #region DO NOT USE IN PRODUCTION - - /// Should be empty - [XmlAnyAttribute] - public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; } - - /// Should be empty - [XmlAnyElement] - public object[]? ADDITIONAL_ELEMENTS { get; set; } - - #endregion - } + public class SCCPlusCart : RomBase { } } \ No newline at end of file diff --git a/SabreTools.Test/Parser/SerializationTests.cs b/SabreTools.Test/Parser/SerializationTests.cs index f182772e..8978d694 100644 --- a/SabreTools.Test/Parser/SerializationTests.cs +++ b/SabreTools.Test/Parser/SerializationTests.cs @@ -671,18 +671,6 @@ namespace SabreTools.Test.Parser Assert.Null(dump.Rom.ADDITIONAL_ATTRIBUTES); Assert.Null(dump.Rom.ADDITIONAL_ELEMENTS); } - - if (dump.MegaRom != null) - { - Assert.Null(dump.MegaRom.ADDITIONAL_ATTRIBUTES); - Assert.Null(dump.MegaRom.ADDITIONAL_ELEMENTS); - } - - if (dump.SCCPlusCart != null) - { - Assert.Null(dump.SCCPlusCart.ADDITIONAL_ATTRIBUTES); - Assert.Null(dump.SCCPlusCart.ADDITIONAL_ELEMENTS); - } } } }