diff --git a/SabreTools.Models/Listxml/Adjuster.cs b/SabreTools.Models/Listxml/Adjuster.cs index d0a3ebc7..706d8041 100644 --- a/SabreTools.Models/Listxml/Adjuster.cs +++ b/SabreTools.Models/Listxml/Adjuster.cs @@ -14,5 +14,17 @@ namespace SabreTools.Models.Listxml [XmlElement("condition")] public Condition? Condition { 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/Listxml/Analog.cs b/SabreTools.Models/Listxml/Analog.cs index 660dd8c6..8f4a1baf 100644 --- a/SabreTools.Models/Listxml/Analog.cs +++ b/SabreTools.Models/Listxml/Analog.cs @@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml { [XmlAttribute("mask")] public string Mask { 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/Listxml/BiosSet.cs b/SabreTools.Models/Listxml/BiosSet.cs index 0e461c2f..2399b4d3 100644 --- a/SabreTools.Models/Listxml/BiosSet.cs +++ b/SabreTools.Models/Listxml/BiosSet.cs @@ -15,5 +15,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] public string? Default { 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/Listxml/Chip.cs b/SabreTools.Models/Listxml/Chip.cs index 8ceb2626..91d4771f 100644 --- a/SabreTools.Models/Listxml/Chip.cs +++ b/SabreTools.Models/Listxml/Chip.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlAttribute("clock")] public string? Clock { 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/Listxml/Condition.cs b/SabreTools.Models/Listxml/Condition.cs index bc0f64dc..8746d61b 100644 --- a/SabreTools.Models/Listxml/Condition.cs +++ b/SabreTools.Models/Listxml/Condition.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlAttribute("value")] public string Value { 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/Listxml/ConfLocation.cs b/SabreTools.Models/Listxml/ConfLocation.cs index f4c7a414..087504b5 100644 --- a/SabreTools.Models/Listxml/ConfLocation.cs +++ b/SabreTools.Models/Listxml/ConfLocation.cs @@ -16,5 +16,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("inverted")] public string? Inverted { 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/Listxml/ConfSetting.cs b/SabreTools.Models/Listxml/ConfSetting.cs index 9796d543..7a58348b 100644 --- a/SabreTools.Models/Listxml/ConfSetting.cs +++ b/SabreTools.Models/Listxml/ConfSetting.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlElement("condition")] public Condition? Condition { 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/Listxml/Configuration.cs b/SabreTools.Models/Listxml/Configuration.cs index f7c18616..faeb7b1e 100644 --- a/SabreTools.Models/Listxml/Configuration.cs +++ b/SabreTools.Models/Listxml/Configuration.cs @@ -23,5 +23,17 @@ namespace SabreTools.Models.Listxml [XmlElement("confsetting")] public ConfSetting[]? ConfSetting { 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/Listxml/Control.cs b/SabreTools.Models/Listxml/Control.cs index c3b84b2d..d66d07d8 100644 --- a/SabreTools.Models/Listxml/Control.cs +++ b/SabreTools.Models/Listxml/Control.cs @@ -52,5 +52,17 @@ namespace SabreTools.Models.Listxml /// Numeric? [XmlAttribute("ways3")] public string? Ways3 { 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/Listxml/Device.cs b/SabreTools.Models/Listxml/Device.cs index f2718c52..1ed464a7 100644 --- a/SabreTools.Models/Listxml/Device.cs +++ b/SabreTools.Models/Listxml/Device.cs @@ -26,5 +26,17 @@ namespace SabreTools.Models.Listxml [XmlElement("extension")] public Extension[]? Extension { 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/Listxml/DeviceRef.cs b/SabreTools.Models/Listxml/DeviceRef.cs index 4f904f3c..b43639b9 100644 --- a/SabreTools.Models/Listxml/DeviceRef.cs +++ b/SabreTools.Models/Listxml/DeviceRef.cs @@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml { [XmlAttribute("name")] public string Name { 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/Listxml/DipLocation.cs b/SabreTools.Models/Listxml/DipLocation.cs index 4d709cac..dbdd4b10 100644 --- a/SabreTools.Models/Listxml/DipLocation.cs +++ b/SabreTools.Models/Listxml/DipLocation.cs @@ -16,5 +16,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("inverted")] public string? Inverted { 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/Listxml/DipSwitch.cs b/SabreTools.Models/Listxml/DipSwitch.cs index d67ebc52..1754258f 100644 --- a/SabreTools.Models/Listxml/DipSwitch.cs +++ b/SabreTools.Models/Listxml/DipSwitch.cs @@ -23,5 +23,17 @@ namespace SabreTools.Models.Listxml [XmlElement("dipvalue")] public DipValue[]? DipValue { 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/Listxml/DipValue.cs b/SabreTools.Models/Listxml/DipValue.cs index 80975d36..fd6d8ce8 100644 --- a/SabreTools.Models/Listxml/DipValue.cs +++ b/SabreTools.Models/Listxml/DipValue.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlElement("condition")] public Condition? Condition { 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/Listxml/Disk.cs b/SabreTools.Models/Listxml/Disk.cs index 8d794a82..20b2ab27 100644 --- a/SabreTools.Models/Listxml/Disk.cs +++ b/SabreTools.Models/Listxml/Disk.cs @@ -33,5 +33,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("optional")] public string? Optional { 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/Listxml/Display.cs b/SabreTools.Models/Listxml/Display.cs index 94ce93b4..6d274544 100644 --- a/SabreTools.Models/Listxml/Display.cs +++ b/SabreTools.Models/Listxml/Display.cs @@ -15,7 +15,7 @@ namespace SabreTools.Models.Listxml /// (0|90|180|270) [XmlAttribute("rotate")] - public long? Rotate { get; set; } + public string? Rotate { get; set; } /// (yes|no) "no" [XmlAttribute("flipx")] @@ -60,5 +60,17 @@ namespace SabreTools.Models.Listxml /// Numeric? [XmlAttribute("vbstart")] public string? VBStart { 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/Listxml/Driver.cs b/SabreTools.Models/Listxml/Driver.cs index a2b42be3..2a413d72 100644 --- a/SabreTools.Models/Listxml/Driver.cs +++ b/SabreTools.Models/Listxml/Driver.cs @@ -37,5 +37,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("incomplete")] public string? Incomplete { 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/Listxml/Extension.cs b/SabreTools.Models/Listxml/Extension.cs index ba51d9b8..4647e333 100644 --- a/SabreTools.Models/Listxml/Extension.cs +++ b/SabreTools.Models/Listxml/Extension.cs @@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml { [XmlAttribute("name")] public string Name { 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/Listxml/Feature.cs b/SabreTools.Models/Listxml/Feature.cs index 10efce6b..ac85d181 100644 --- a/SabreTools.Models/Listxml/Feature.cs +++ b/SabreTools.Models/Listxml/Feature.cs @@ -17,5 +17,17 @@ namespace SabreTools.Models.Listxml /// (unemulated|imperfect) [XmlAttribute("overall")] public string? Overall { 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/Listxml/Input.cs b/SabreTools.Models/Listxml/Input.cs index ee164e7a..8bd04e3e 100644 --- a/SabreTools.Models/Listxml/Input.cs +++ b/SabreTools.Models/Listxml/Input.cs @@ -25,5 +25,17 @@ namespace SabreTools.Models.Listxml /// Numeric? [XmlElement("control")] public Control[]? Control { 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/Listxml/Instance.cs b/SabreTools.Models/Listxml/Instance.cs index 14ea7343..43d51238 100644 --- a/SabreTools.Models/Listxml/Instance.cs +++ b/SabreTools.Models/Listxml/Instance.cs @@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml [XmlAttribute("briefname")] public string BriefName { 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/Listxml/Machine.cs b/SabreTools.Models/Listxml/Machine.cs index f799b593..3533aa4d 100644 --- a/SabreTools.Models/Listxml/Machine.cs +++ b/SabreTools.Models/Listxml/Machine.cs @@ -102,5 +102,17 @@ namespace SabreTools.Models.Listxml [XmlElement("ramoption")] public RamOption[]? RamOption { 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/Listxml/Mame.cs b/SabreTools.Models/Listxml/Mame.cs index 0d116846..a94ec3ba 100644 --- a/SabreTools.Models/Listxml/Mame.cs +++ b/SabreTools.Models/Listxml/Mame.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlElement("machine")] public Machine[] Machine { 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/Listxml/Port.cs b/SabreTools.Models/Listxml/Port.cs index 7e608b91..f647add3 100644 --- a/SabreTools.Models/Listxml/Port.cs +++ b/SabreTools.Models/Listxml/Port.cs @@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml [XmlElement("analog")] public Analog[]? Analog { 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/Listxml/RamOption.cs b/SabreTools.Models/Listxml/RamOption.cs index 06311803..698944cd 100644 --- a/SabreTools.Models/Listxml/RamOption.cs +++ b/SabreTools.Models/Listxml/RamOption.cs @@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml [XmlAttribute("default")] public string? Default { 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/Listxml/Rom.cs b/SabreTools.Models/Listxml/Rom.cs index f74b2ac3..c1b4042f 100644 --- a/SabreTools.Models/Listxml/Rom.cs +++ b/SabreTools.Models/Listxml/Rom.cs @@ -38,5 +38,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("optional")] public string? Optional { 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/Listxml/Sample.cs b/SabreTools.Models/Listxml/Sample.cs index 8e00a82c..05278a56 100644 --- a/SabreTools.Models/Listxml/Sample.cs +++ b/SabreTools.Models/Listxml/Sample.cs @@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml { [XmlAttribute("name")] public string Name { 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/Listxml/Slot.cs b/SabreTools.Models/Listxml/Slot.cs index 0f335a51..cf662402 100644 --- a/SabreTools.Models/Listxml/Slot.cs +++ b/SabreTools.Models/Listxml/Slot.cs @@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml [XmlElement("slotoption")] public SlotOption[]? SlotOption { 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/Listxml/SlotOption.cs b/SabreTools.Models/Listxml/SlotOption.cs index 4aa34342..9e28c9dc 100644 --- a/SabreTools.Models/Listxml/SlotOption.cs +++ b/SabreTools.Models/Listxml/SlotOption.cs @@ -15,5 +15,17 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] public string? Default { 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/Listxml/SoftwareList.cs b/SabreTools.Models/Listxml/SoftwareList.cs index 6b1d0038..de304959 100644 --- a/SabreTools.Models/Listxml/SoftwareList.cs +++ b/SabreTools.Models/Listxml/SoftwareList.cs @@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml [XmlAttribute("filter")] public string? Filter { 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/Listxml/Sound.cs b/SabreTools.Models/Listxml/Sound.cs index b244f2d3..1165672f 100644 --- a/SabreTools.Models/Listxml/Sound.cs +++ b/SabreTools.Models/Listxml/Sound.cs @@ -9,5 +9,17 @@ namespace SabreTools.Models.Listxml /// Numeric? [XmlAttribute("channels")] public string Channels { 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/README.MD b/SabreTools.Models/README.MD new file mode 100644 index 00000000..bbfd898b --- /dev/null +++ b/SabreTools.Models/README.MD @@ -0,0 +1,20 @@ +# SabreTools.Models + +This library comprises of models that represent either directly serializable or representative structures for all DAT types. This library is currently unused by any other library in SabreTools, as there are no ways of properly dealing with conversion between models, filtering, or many of the other features. All of the main models representing metadata files should have parsers created outside of the current code. The parser code will likely be partially patterned off of the code being used to create the serialization tests. + +In each completed model, there is a section that looks like the following: +``` + #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 +``` + +This code should be removed before the models are used. This is only included during debugging and implementation as to ensure that there are no notable holes in the models that would disallow 1:1 replication of inputs. \ No newline at end of file diff --git a/SabreTools.Test/Parser/SerializationTests.cs b/SabreTools.Test/Parser/SerializationTests.cs index eb39bf21..309d25be 100644 --- a/SabreTools.Test/Parser/SerializationTests.cs +++ b/SabreTools.Test/Parser/SerializationTests.cs @@ -33,5 +33,233 @@ namespace SabreTools.Test.Parser Assert.Null(file.ADDITIONAL_ELEMENTS); } } + + [Fact] + public void ListxmlDeserializeTest() + { + // Open the file for reading + string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-listxml-files.xml.gz"); + using var fs = System.IO.File.OpenRead(filename); + using var gz = new System.IO.Compression.GZipStream(fs, System.IO.Compression.CompressionMode.Decompress); + using var xr = System.Xml.XmlReader.Create(gz, new System.Xml.XmlReaderSettings { DtdProcessing = System.Xml.DtdProcessing.Parse }); + + // Setup the serializer + var serializer = new XmlSerializer(typeof(Models.Listxml.Mame)); + + // Deserialize the file + var dat = serializer.Deserialize(xr) as Models.Listxml.Mame; + + // Validate the values + Assert.NotNull(dat); + Assert.NotNull(dat.Machine); + Assert.Equal(45861, dat.Machine.Length); + + // Validate we're not missing any attributes or elements + Assert.Null(dat.ADDITIONAL_ATTRIBUTES); + Assert.Null(dat.ADDITIONAL_ELEMENTS); + foreach (var machine in dat.Machine) + { + Assert.Null(machine.ADDITIONAL_ATTRIBUTES); + Assert.Null(machine.ADDITIONAL_ELEMENTS); + + foreach (var biosset in machine.BiosSet ?? Array.Empty()) + { + Assert.Null(biosset.ADDITIONAL_ATTRIBUTES); + Assert.Null(biosset.ADDITIONAL_ELEMENTS); + } + + foreach (var rom in machine.Rom ?? Array.Empty()) + { + Assert.Null(rom.ADDITIONAL_ATTRIBUTES); + Assert.Null(rom.ADDITIONAL_ELEMENTS); + } + + foreach (var disk in machine.Disk ?? Array.Empty()) + { + Assert.Null(disk.ADDITIONAL_ATTRIBUTES); + Assert.Null(disk.ADDITIONAL_ELEMENTS); + } + + foreach (var deviceRef in machine.DeviceRef ?? Array.Empty()) + { + Assert.Null(deviceRef.ADDITIONAL_ATTRIBUTES); + Assert.Null(deviceRef.ADDITIONAL_ELEMENTS); + } + + foreach (var sample in machine.Sample ?? Array.Empty()) + { + Assert.Null(sample.ADDITIONAL_ATTRIBUTES); + Assert.Null(sample.ADDITIONAL_ELEMENTS); + } + + foreach (var chip in machine.Chip ?? Array.Empty()) + { + Assert.Null(chip.ADDITIONAL_ATTRIBUTES); + Assert.Null(chip.ADDITIONAL_ELEMENTS); + } + + foreach (var display in machine.Display ?? Array.Empty()) + { + Assert.Null(display.ADDITIONAL_ATTRIBUTES); + Assert.Null(display.ADDITIONAL_ELEMENTS); + } + + if (machine.Sound != null) + { + Assert.Null(machine.Sound.ADDITIONAL_ATTRIBUTES); + Assert.Null(machine.Sound.ADDITIONAL_ELEMENTS); + } + + if (machine.Input != null) + { + Assert.Null(machine.Input.ADDITIONAL_ATTRIBUTES); + Assert.Null(machine.Input.ADDITIONAL_ELEMENTS); + + foreach (var control in machine.Input.Control ?? Array.Empty()) + { + Assert.Null(control.ADDITIONAL_ATTRIBUTES); + Assert.Null(control.ADDITIONAL_ELEMENTS); + } + } + + foreach (var dipswitch in machine.DipSwitch ?? Array.Empty()) + { + Assert.Null(dipswitch.ADDITIONAL_ATTRIBUTES); + Assert.Null(dipswitch.ADDITIONAL_ELEMENTS); + + if (dipswitch.Condition != null) + { + Assert.Null(dipswitch.Condition.ADDITIONAL_ATTRIBUTES); + Assert.Null(dipswitch.Condition.ADDITIONAL_ELEMENTS); + } + + foreach (var diplocation in dipswitch.DipLocation ?? Array.Empty()) + { + Assert.Null(diplocation.ADDITIONAL_ATTRIBUTES); + Assert.Null(diplocation.ADDITIONAL_ELEMENTS); + } + + foreach (var dipvalue in dipswitch.DipValue ?? Array.Empty()) + { + Assert.Null(dipvalue.ADDITIONAL_ATTRIBUTES); + Assert.Null(dipvalue.ADDITIONAL_ELEMENTS); + + if (dipvalue.Condition != null) + { + Assert.Null(dipvalue.Condition.ADDITIONAL_ATTRIBUTES); + Assert.Null(dipvalue.Condition.ADDITIONAL_ELEMENTS); + } + } + } + + foreach (var configuration in machine.Configuration ?? Array.Empty()) + { + Assert.Null(configuration.ADDITIONAL_ATTRIBUTES); + Assert.Null(configuration.ADDITIONAL_ELEMENTS); + + if (configuration.Condition != null) + { + Assert.Null(configuration.Condition.ADDITIONAL_ATTRIBUTES); + Assert.Null(configuration.Condition.ADDITIONAL_ELEMENTS); + } + + foreach (var conflocation in configuration.ConfLocation ?? Array.Empty()) + { + Assert.Null(conflocation.ADDITIONAL_ATTRIBUTES); + Assert.Null(conflocation.ADDITIONAL_ELEMENTS); + } + + foreach (var confsetting in configuration.ConfSetting ?? Array.Empty()) + { + Assert.Null(confsetting.ADDITIONAL_ATTRIBUTES); + Assert.Null(confsetting.ADDITIONAL_ELEMENTS); + + if (confsetting.Condition != null) + { + Assert.Null(confsetting.Condition.ADDITIONAL_ATTRIBUTES); + Assert.Null(confsetting.Condition.ADDITIONAL_ELEMENTS); + } + } + } + + foreach (var port in machine.Port ?? Array.Empty()) + { + Assert.Null(port.ADDITIONAL_ATTRIBUTES); + Assert.Null(port.ADDITIONAL_ELEMENTS); + + foreach (var analog in port.Analog ?? Array.Empty()) + { + Assert.Null(analog.ADDITIONAL_ATTRIBUTES); + Assert.Null(analog.ADDITIONAL_ELEMENTS); + } + } + + foreach (var adjuster in machine.Adjuster ?? Array.Empty()) + { + Assert.Null(adjuster.ADDITIONAL_ATTRIBUTES); + Assert.Null(adjuster.ADDITIONAL_ELEMENTS); + + if (adjuster.Condition != null) + { + Assert.Null(adjuster.Condition.ADDITIONAL_ATTRIBUTES); + Assert.Null(adjuster.Condition.ADDITIONAL_ELEMENTS); + } + } + + if (machine.Driver != null) + { + Assert.Null(machine.Driver.ADDITIONAL_ATTRIBUTES); + Assert.Null(machine.Driver.ADDITIONAL_ELEMENTS); + } + + foreach (var feature in machine.Feature ?? Array.Empty()) + { + Assert.Null(feature.ADDITIONAL_ATTRIBUTES); + Assert.Null(feature.ADDITIONAL_ELEMENTS); + } + + foreach (var device in machine.Device ?? Array.Empty()) + { + Assert.Null(device.ADDITIONAL_ATTRIBUTES); + Assert.Null(device.ADDITIONAL_ELEMENTS); + + if (device.Instance != null) + { + Assert.Null(device.Instance.ADDITIONAL_ATTRIBUTES); + Assert.Null(device.Instance.ADDITIONAL_ELEMENTS); + } + + foreach (var extension in device.Extension ?? Array.Empty()) + { + Assert.Null(extension.ADDITIONAL_ATTRIBUTES); + Assert.Null(extension.ADDITIONAL_ELEMENTS); + } + } + + foreach (var slot in machine.Slot ?? Array.Empty()) + { + Assert.Null(slot.ADDITIONAL_ATTRIBUTES); + Assert.Null(slot.ADDITIONAL_ELEMENTS); + + foreach (var slotoption in slot.SlotOption ?? Array.Empty()) + { + Assert.Null(slotoption.ADDITIONAL_ATTRIBUTES); + Assert.Null(slotoption.ADDITIONAL_ELEMENTS); + } + } + + foreach (var softwarelist in machine.SoftwareList ?? Array.Empty()) + { + Assert.Null(softwarelist.ADDITIONAL_ATTRIBUTES); + Assert.Null(softwarelist.ADDITIONAL_ELEMENTS); + } + + foreach (var ramoption in machine.RamOption ?? Array.Empty()) + { + Assert.Null(ramoption.ADDITIONAL_ATTRIBUTES); + Assert.Null(ramoption.ADDITIONAL_ELEMENTS); + } + } + } } } \ No newline at end of file diff --git a/SabreTools.Test/TestData/test-listxml-files.xml.gz b/SabreTools.Test/TestData/test-listxml-files.xml.gz new file mode 100644 index 00000000..fb65ba3d Binary files /dev/null and b/SabreTools.Test/TestData/test-listxml-files.xml.gz differ