diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs
index 4a58c3f1..7f87d5cf 100644
--- a/SabreTools.Core/Enums.cs
+++ b/SabreTools.Core/Enums.cs
@@ -292,6 +292,7 @@ namespace SabreTools.Core
RamOption,
Release,
Sample,
+ Serials,
Setting,
SharedFeature,
Slot,
diff --git a/SabreTools.DatItems/Formats/Serials.cs b/SabreTools.DatItems/Formats/Serials.cs
new file mode 100644
index 00000000..4c843ff9
--- /dev/null
+++ b/SabreTools.DatItems/Formats/Serials.cs
@@ -0,0 +1,138 @@
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+using SabreTools.Core;
+
+// TODO: Add item mappings for all fields
+namespace SabreTools.DatItems.Formats
+{
+ ///
+ /// Represents a single serials item
+ ///
+ [JsonObject("serials"), XmlRoot("serials")]
+ public class Serials : DatItem
+ {
+ #region Fields
+
+ ///
+ /// Media serial 1 value
+ ///
+ [JsonProperty("media_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial1")]
+ public string MediaSerial1 { get; set; }
+
+ ///
+ /// Media serial 2 value
+ ///
+ [JsonProperty("media_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial2")]
+ public string MediaSerial2 { get; set; }
+
+ ///
+ /// PCB serial value
+ ///
+ [JsonProperty("pcb_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("pcb_serial")]
+ public string PcbSerial { get; set; }
+
+ ///
+ /// Rom chip serial 1 value
+ ///
+ [JsonProperty("romchip_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial1")]
+ public string RomChipSerial1 { get; set; }
+
+ ///
+ /// Rom chip serial 2 value
+ ///
+ [JsonProperty("romchip_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial2")]
+ public string RomChipSerial2 { get; set; }
+
+ ///
+ /// Chip serial value
+ ///
+ [JsonProperty("chip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("chip_serial")]
+ public string ChipSerial { get; set; }
+
+ ///
+ /// Lockout serial value
+ ///
+ [JsonProperty("lockout_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("lockout_serial")]
+ public string LockoutSerial { get; set; }
+
+ ///
+ /// Save chip serial value
+ ///
+ [JsonProperty("savechip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("savechip_serial")]
+ public string SaveChipSerial { get; set; }
+
+ ///
+ /// Media stamp value
+ ///
+ [JsonProperty("mediastamp", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mediastamp")]
+ public string MediaStamp { get; set; }
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Create a default, empty Serials object
+ ///
+ public Serials()
+ {
+ ItemType = ItemType.Serials;
+ }
+
+ #endregion
+
+ #region Cloning Methods
+
+ ///
+ public override object Clone()
+ {
+ return new Serials()
+ {
+ ItemType = this.ItemType,
+ DupeType = this.DupeType,
+
+ Machine = this.Machine.Clone() as Machine,
+ Source = this.Source.Clone() as Source,
+ Remove = this.Remove,
+
+ MediaSerial1 = this.MediaSerial1,
+ MediaSerial2 = this.MediaSerial2,
+ PcbSerial = this.PcbSerial,
+ RomChipSerial1 = this.RomChipSerial1,
+ RomChipSerial2 = this.RomChipSerial2,
+ ChipSerial = this.ChipSerial,
+ LockoutSerial = this.LockoutSerial,
+ SaveChipSerial = this.SaveChipSerial,
+ MediaStamp = this.MediaStamp,
+ };
+ }
+
+ #endregion
+
+ #region Comparision Methods
+
+ ///
+ public override bool Equals(DatItem other)
+ {
+ // If we don't have a Serials, return false
+ if (ItemType != other.ItemType)
+ return false;
+
+ // Otherwise, treat it as a Serials
+ Serials newOther = other as Serials;
+
+ // If the Serials information matches
+ return (MediaSerial1 == newOther.MediaSerial1
+ && MediaSerial2 == newOther.MediaSerial2
+ && PcbSerial == newOther.PcbSerial
+ && RomChipSerial1 == newOther.RomChipSerial1
+ && RomChipSerial2 == newOther.RomChipSerial2
+ && ChipSerial == newOther.ChipSerial
+ && LockoutSerial == newOther.LockoutSerial
+ && SaveChipSerial == newOther.SaveChipSerial
+ && MediaStamp == newOther.MediaStamp);
+ }
+
+ #endregion
+ }
+}