diff --git a/SabreTools.Serialization/CrossModel/Listrom.Serializer.cs b/SabreTools.Serialization/CrossModel/Listrom.Serializer.cs index 20b43b17..e99379fb 100644 --- a/SabreTools.Serialization/CrossModel/Listrom.Serializer.cs +++ b/SabreTools.Serialization/CrossModel/Listrom.Serializer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using SabreTools.Models.Listrom; using SabreTools.Serialization.Interfaces; @@ -58,14 +57,19 @@ namespace SabreTools.Serialization.CrossModel if (item.Row != null && item.Row.Length > 0) { - var datItems = new List(); + var disks = new List(); + var roms = new List(); foreach (var file in item.Row) { - datItems.Add(ConvertToInternalModel(file)); + var datItem = ConvertToInternalModel(file); + if (datItem is Models.Metadata.Disk disk) + disks.Add(disk); + else if (datItem is Models.Metadata.Rom rom) + roms.Add(rom); } - machine[Models.Metadata.Machine.DiskKey] = datItems.Where(i => i.ReadString(Models.Metadata.DatItem.TypeKey) == "disk").Select(d => d as Models.Metadata.Disk).ToArray(); - machine[Models.Metadata.Machine.RomKey] = datItems.Where(i => i.ReadString(Models.Metadata.DatItem.TypeKey) == "rom").Select(d => d as Models.Metadata.Rom).ToArray(); + machine[Models.Metadata.Machine.DiskKey] = disks.ToArray(); + machine[Models.Metadata.Machine.RomKey] = roms.ToArray(); } return machine; diff --git a/SabreTools.Serialization/Deserializers/BSP.cs b/SabreTools.Serialization/Deserializers/BSP.cs index 6f93ffb9..bc88e3fb 100644 --- a/SabreTools.Serialization/Deserializers/BSP.cs +++ b/SabreTools.Serialization/Deserializers/BSP.cs @@ -1,5 +1,4 @@ using System.IO; -using System.Linq; using System.Text; using SabreTools.IO.Extensions; using SabreTools.Models.BSP; @@ -165,9 +164,9 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var texture = new Texture(); - byte[]? name = data.ReadBytes(16)?.TakeWhile(c => c != '\0')?.ToArray(); + byte[]? name = data.ReadBytes(16); if (name != null) - texture.Name = Encoding.ASCII.GetString(name); + texture.Name = Encoding.ASCII.GetString(name).TrimEnd('\0'); texture.Width = data.ReadUInt32(); texture.Height = data.ReadUInt32(); texture.Offsets = new uint[4]; diff --git a/SabreTools.Serialization/Deserializers/BaseBinaryDeserializer.cs b/SabreTools.Serialization/Deserializers/BaseBinaryDeserializer.cs index ffa41c9d..c59474e6 100644 --- a/SabreTools.Serialization/Deserializers/BaseBinaryDeserializer.cs +++ b/SabreTools.Serialization/Deserializers/BaseBinaryDeserializer.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Reflection; using SabreTools.Serialization.Interfaces; @@ -108,12 +107,13 @@ namespace SabreTools.Serialization.Deserializers if (deserializerName == null) return default; - // If the deserializer has no model type - Type? modelType = typeof(TDeserializer).GetGenericArguments()?.FirstOrDefault(); - if (modelType == null) + // If the deserializer has no generic arguments + var genericArgs = typeof(TDeserializer).GetGenericArguments(); + if (genericArgs.Length == 0) return default; // Loop through all loaded assemblies + Type modelType = genericArgs[0]; foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { // If the assembly is invalid diff --git a/SabreTools.Serialization/Deserializers/Hashfile.cs b/SabreTools.Serialization/Deserializers/Hashfile.cs index b1269cc2..d1c53606 100644 --- a/SabreTools.Serialization/Deserializers/Hashfile.cs +++ b/SabreTools.Serialization/Deserializers/Hashfile.cs @@ -95,7 +95,7 @@ namespace SabreTools.Serialization.Deserializers // Read and split the line string? line = reader.ReadLine(); #if NETFRAMEWORK || NETCOREAPP3_1 - string[]? lineParts = line?.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + string[]? lineParts = line?.Split([' '], StringSplitOptions.RemoveEmptyEntries); #else string[]? lineParts = line?.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); #endif diff --git a/SabreTools.Serialization/Deserializers/PortableExecutable.cs b/SabreTools.Serialization/Deserializers/PortableExecutable.cs index 9afea576..95de32d3 100644 --- a/SabreTools.Serialization/Deserializers/PortableExecutable.cs +++ b/SabreTools.Serialization/Deserializers/PortableExecutable.cs @@ -1047,7 +1047,7 @@ namespace SabreTools.Serialization.Deserializers || importTable.ImportAddressTables != null && importTable.ImportAddressTables.Count > 0) { // Get the addresses of the hint/name table entries - List hintNameTableEntryAddresses = new List(); + var hintNameTableEntryAddresses = new List(); // If we have import lookup tables if (importTable.ImportLookupTables != null && importLookupTables.Count > 0)