mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-09-23 15:24:56 +00:00
Create base class for serializers
This commit is contained in:
@@ -73,6 +73,7 @@ namespace SabreTools.Serialization.Deserializers
|
||||
var deserializer = GetType<IFileDeserializer<TModel>>();
|
||||
if (deserializer == null)
|
||||
return default;
|
||||
|
||||
return deserializer.Deserialize(path);
|
||||
}
|
||||
|
||||
@@ -127,7 +128,7 @@ namespace SabreTools.Serialization.Deserializers
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
16
SabreTools.Serialization/Interfaces/IByteSerializer.cs
Normal file
16
SabreTools.Serialization/Interfaces/IByteSerializer.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace SabreTools.Serialization.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines how to serialize to byte arrays
|
||||
/// </summary>
|
||||
public interface IByteSerializer<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Serialize a <typeparamref name="T"/> into a byte array
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type of object to serialize from</typeparam>
|
||||
/// <param name="obj">Data to serialize</param>
|
||||
/// <returns>Filled object on success, null on error</returns>
|
||||
byte[]? SerializeArray(T? obj);
|
||||
}
|
||||
}
|
||||
@@ -2,26 +2,6 @@ namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class ArchiveDotOrg : XmlFile<Models.ArchiveDotOrg.Files>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.ArchiveDotOrg.Files? obj, string? path)
|
||||
{
|
||||
var serializer = new ArchiveDotOrg();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static System.IO.Stream? SerializeStream(Models.ArchiveDotOrg.Files? obj)
|
||||
{
|
||||
var serializer = new ArchiveDotOrg();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
// All logic taken care of in the base class
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,10 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.AttractMode;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class AttractMode :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class AttractMode : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region Constants
|
||||
|
||||
@@ -66,17 +63,44 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path, bool longHeader = false)
|
||||
/// <inheritdoc cref="Interfaces.IByteSerializer.SerializeArray(T?)"/>
|
||||
public static byte[]? SerializeBytes(MetadataFile? obj, bool longHeader = false)
|
||||
{
|
||||
var serializer = new AttractMode();
|
||||
return serializer.Serialize(obj, path);
|
||||
return serializer.SerializeArray(obj, longHeader);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
public override byte[]? SerializeArray(MetadataFile? obj)
|
||||
=> SerializeArray(obj, false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public byte[]? SerializeArray(MetadataFile? obj, bool longHeader)
|
||||
{
|
||||
using var stream = SerializeStream(obj, longHeader);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path, bool longHeader = false)
|
||||
{
|
||||
var serializer = new AttractMode();
|
||||
return serializer.Serialize(obj, path, longHeader);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool Serialize(MetadataFile? obj, string? path)
|
||||
=> Serialize(obj, path, false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -98,7 +122,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(MetadataFile? obj, bool longHeader = false)
|
||||
{
|
||||
var serializer = new AttractMode();
|
||||
@@ -106,7 +130,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
=> Serialize(obj, false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
138
SabreTools.Serialization/Serializers/BaseBinarySerializer.cs
Normal file
138
SabreTools.Serialization/Serializers/BaseBinarySerializer.cs
Normal file
@@ -0,0 +1,138 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for all binary serializers
|
||||
/// </summary>
|
||||
/// <typeparam name="TModel">Type of the model to serialize</typeparam>
|
||||
/// <remarks>These methods assume there is a concrete implementation of the serializer for the model available</remarks>
|
||||
public abstract class BaseBinarySerializer<TModel> :
|
||||
IByteSerializer<TModel>,
|
||||
IFileSerializer<TModel>,
|
||||
IStreamSerializer<TModel>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual byte[]? SerializeArray(TModel? obj)
|
||||
{
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual bool Serialize(TModel? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public abstract Stream? Serialize(TModel? obj);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Static Implementations
|
||||
|
||||
/// <inheritdoc cref="IByteSerializer.Deserialize(T?)"/>
|
||||
public static byte[]? SerializeBytes(TModel? obj)
|
||||
{
|
||||
var serializer = GetType<IByteSerializer<TModel>>();
|
||||
if (serializer == null)
|
||||
return default;
|
||||
|
||||
return serializer.SerializeArray(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(TModel? obj, string? path)
|
||||
{
|
||||
var serializer = GetType<IFileSerializer<TModel>>();
|
||||
if (serializer == null)
|
||||
return default;
|
||||
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(TModel? obj)
|
||||
{
|
||||
var serializer = GetType<IStreamSerializer<TModel>>();
|
||||
if (serializer == null)
|
||||
return default;
|
||||
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
/// <summary>
|
||||
/// Get a constructed instance of a type, if possible
|
||||
/// </summary>
|
||||
/// <typeparam name="TSerializer">Serializer type to construct</typeparam>
|
||||
/// <returns>Serializer of the requested type, null on error</returns>
|
||||
private static TSerializer? GetType<TSerializer>()
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
if (assembly == null)
|
||||
return default;
|
||||
|
||||
// If not all types can be loaded, use the ones that could be
|
||||
List<Type> assemblyTypes = [];
|
||||
try
|
||||
{
|
||||
assemblyTypes = assembly.GetTypes().ToList<Type>();
|
||||
}
|
||||
catch (ReflectionTypeLoadException rtle)
|
||||
{
|
||||
assemblyTypes = rtle.Types.Where(t => t != null)!.ToList<Type>();
|
||||
}
|
||||
|
||||
// Loop through all types
|
||||
foreach (Type type in assemblyTypes)
|
||||
{
|
||||
// If the type isn't a class or doesn't implement the interface
|
||||
if (!type.IsClass || type.GetInterface(typeof(TSerializer).Name) == null)
|
||||
continue;
|
||||
|
||||
// Try to create a concrete instance of the type
|
||||
var instance = (TSerializer?)Activator.CreateInstance(type);
|
||||
if (instance != null)
|
||||
return instance;
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -3,37 +3,10 @@ using System.Text;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class Catalog :
|
||||
JsonFile<Models.Xbox.Catalog>
|
||||
public class Catalog : JsonFile<Models.Xbox.Catalog>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.Xbox.Catalog? obj, string? path)
|
||||
{
|
||||
var serializer = new Catalog();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <remarks>Catalog.js file is encoded as UTF-16 LE</remarks>
|
||||
public override bool Serialize(Models.Xbox.Catalog? obj, string? path)
|
||||
=> Serialize(obj, path, new UnicodeEncoding());
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(Models.Xbox.Catalog? obj)
|
||||
{
|
||||
var serializer = new Catalog();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <remarks>Catalog.js file is encoded as UTF-16 LE</remarks>
|
||||
public override Stream? Serialize(Models.Xbox.Catalog? obj)
|
||||
=> Serialize(obj, new UnicodeEncoding());
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,14 +3,38 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.ClrMamePro;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class ClrMamePro :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class ClrMamePro : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IByteSerializer.SerializeArray(T?)"/>
|
||||
public static byte[]? SerializeBytes(MetadataFile? obj, bool quotes = false)
|
||||
{
|
||||
var serializer = new ClrMamePro();
|
||||
return serializer.SerializeArray(obj, quotes);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[]? SerializeArray(MetadataFile? obj)
|
||||
=> SerializeArray(obj, false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public byte[]? SerializeArray(MetadataFile? obj, bool quotes)
|
||||
{
|
||||
using var stream = SerializeStream(obj, quotes);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
@@ -21,7 +45,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
public override bool Serialize(MetadataFile? obj, string? path)
|
||||
=> Serialize(obj, path, true);
|
||||
|
||||
/// <inheritdoc cref="Serialize(MetadataFile, string)"/>
|
||||
@@ -51,7 +75,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
=> Serialize(obj, true);
|
||||
|
||||
/// <inheritdoc cref="Serialize(MetadataFile)"/>
|
||||
|
||||
@@ -2,51 +2,13 @@ using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Models.CueSheets;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class CueSheet :
|
||||
IFileSerializer<Models.CueSheets.CueSheet>,
|
||||
IStreamSerializer<Models.CueSheets.CueSheet>
|
||||
public class CueSheet : BaseBinarySerializer<Models.CueSheets.CueSheet>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.CueSheets.CueSheet? obj, string? path)
|
||||
{
|
||||
var serializer = new CueSheet();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(Models.CueSheets.CueSheet? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(Models.CueSheets.CueSheet? obj)
|
||||
{
|
||||
var serializer = new CueSheet();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(Models.CueSheets.CueSheet? obj)
|
||||
public override Stream? Serialize(Models.CueSheets.CueSheet? obj)
|
||||
{
|
||||
// If the cuesheet is null
|
||||
if (obj == null)
|
||||
@@ -293,7 +255,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -3,51 +3,13 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.DosCenter;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class DosCenter :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class DosCenter : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path)
|
||||
{
|
||||
var serializer = new DosCenter();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = System.IO.File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(MetadataFile? obj)
|
||||
{
|
||||
var serializer = new DosCenter();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
{
|
||||
// If the metadata file is null
|
||||
if (obj == null)
|
||||
@@ -160,7 +122,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
writer.WriteEndElement(); // file
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -4,51 +4,13 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.EverdriveSMDB;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class EverdriveSMDB :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class EverdriveSMDB : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path)
|
||||
{
|
||||
var serializer = new EverdriveSMDB();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = System.IO.File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(MetadataFile? obj)
|
||||
{
|
||||
var serializer = new EverdriveSMDB();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
{
|
||||
// If the metadata file is null
|
||||
if (obj == null)
|
||||
@@ -99,7 +61,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
writer.Flush();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -5,14 +5,39 @@ using System.Text;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.Hashfile;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class Hashfile :
|
||||
IFileSerializer<Models.Hashfile.Hashfile>,
|
||||
IStreamSerializer<Models.Hashfile.Hashfile>
|
||||
// TODO: Create variants for the implemented types
|
||||
public class Hashfile : BaseBinarySerializer<Models.Hashfile.Hashfile>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IByteSerializer.SerializeArray(T?)"/>
|
||||
public static byte[]? SerializeBytes(Models.Hashfile.Hashfile? obj, HashType hash = HashType.CRC32)
|
||||
{
|
||||
var serializer = new Hashfile();
|
||||
return serializer.SerializeArray(obj, hash);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[]? SerializeArray(Models.Hashfile.Hashfile? obj)
|
||||
=> SerializeArray(obj, HashType.CRC32);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public byte[]? SerializeArray(Models.Hashfile.Hashfile? obj, HashType hash)
|
||||
{
|
||||
using var stream = SerializeStream(obj, hash);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
@@ -23,7 +48,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(Models.Hashfile.Hashfile? obj, string? path)
|
||||
public override bool Serialize(Models.Hashfile.Hashfile? obj, string? path)
|
||||
=> Serialize(obj, path, HashType.CRC32);
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -53,7 +78,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(Models.Hashfile.Hashfile? obj)
|
||||
public override Stream? Serialize(Models.Hashfile.Hashfile? obj)
|
||||
=> Serialize(obj, HashType.CRC32);
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -2,51 +2,13 @@ using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class IRD :
|
||||
IFileSerializer<Models.IRD.File>,
|
||||
IStreamSerializer<Models.IRD.File>
|
||||
public class IRD : BaseBinarySerializer<Models.IRD.File>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.IRD.File? obj, string? path)
|
||||
{
|
||||
var serializer = new IRD();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(Models.IRD.File? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = System.IO.File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(Models.IRD.File? obj)
|
||||
{
|
||||
var serializer = new IRD();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(Models.IRD.File? obj)
|
||||
public override Stream? Serialize(Models.IRD.File? obj)
|
||||
{
|
||||
// If the data is invalid
|
||||
if (obj?.Magic == null)
|
||||
@@ -165,7 +127,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
@@ -9,14 +8,38 @@ namespace SabreTools.Serialization.Serializers
|
||||
/// Base class for other JSON serializers
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class JsonFile<T> :
|
||||
IFileSerializer<T>,
|
||||
IStreamSerializer<T>
|
||||
public class JsonFile<T> : BaseBinarySerializer<T>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[]? SerializeArray(T? obj)
|
||||
=> SerializeArray(obj, new UTF8Encoding(false));
|
||||
|
||||
/// <summary>
|
||||
/// Serialize a <typeparamref name="T"/> into a byte array
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type of object to serialize from</typeparam>
|
||||
/// <param name="obj">Data to serialize</param>
|
||||
/// <param name="encoding">Encoding to parse text as</param>
|
||||
/// <returns>Filled object on success, null on error</returns>
|
||||
public byte[]? SerializeArray(T? obj, Encoding encoding)
|
||||
{
|
||||
using var stream = Serialize(obj, encoding);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual bool Serialize(T? obj, string? path)
|
||||
public override bool Serialize(T? obj, string? path)
|
||||
=> Serialize(obj, path, new UTF8Encoding(false));
|
||||
|
||||
/// <summary>
|
||||
@@ -47,7 +70,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual Stream? Serialize(T? obj)
|
||||
public override Stream? Serialize(T? obj)
|
||||
=> Serialize(obj, new UTF8Encoding(false));
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -2,51 +2,13 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.Models.Listrom;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class Listrom :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class Listrom : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path)
|
||||
{
|
||||
var serializer = new Listrom();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(MetadataFile? obj)
|
||||
{
|
||||
var serializer = new Listrom();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
{
|
||||
// If the metadata file is null
|
||||
if (obj == null)
|
||||
@@ -192,7 +154,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
writer.Flush();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,7 @@
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class Listxml :
|
||||
XmlFile<Models.Listxml.Mame>
|
||||
public class Listxml : XmlFile<Models.Listxml.Mame>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.Listxml.Mame? obj, string? path)
|
||||
{
|
||||
var serializer = new Listxml();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static System.IO.Stream? SerializeStream(Models.Listxml.Mame? obj)
|
||||
{
|
||||
var serializer = new Listxml();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
// All logic taken care of in the base class
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,7 @@ using SabreTools.Models.Logiqx;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class Logiqx :
|
||||
XmlFile<Datafile>
|
||||
public class Logiqx : XmlFile<Datafile>
|
||||
{
|
||||
#region Constants
|
||||
|
||||
@@ -30,15 +29,16 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#endregion
|
||||
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="XmlFile.SerializeArray(T?, string?, string?, string?, string?)" />
|
||||
public override byte[]? SerializeArray(Datafile? obj)
|
||||
=> SerializeArray(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Datafile? obj, string? path)
|
||||
{
|
||||
var serializer = new Logiqx();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?, string?)" />
|
||||
public override bool Serialize(Datafile? obj, string? path)
|
||||
=> Serialize(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
@@ -47,13 +47,6 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(Datafile? obj)
|
||||
{
|
||||
var serializer = new Logiqx();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?)" />
|
||||
public override Stream? Serialize(Datafile? obj)
|
||||
=> Serialize(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
|
||||
@@ -1,28 +1,7 @@
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class M1 :
|
||||
XmlFile<Models.Listxml.M1>
|
||||
public class M1 : XmlFile<Models.Listxml.M1>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.Listxml.M1? obj, string? path)
|
||||
{
|
||||
var serializer = new M1();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static System.IO.Stream? SerializeStream(Models.Listxml.M1? obj)
|
||||
{
|
||||
var serializer = new M1();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
// All logic taken care of in the base class
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,7 @@
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class OfflineList :
|
||||
XmlFile<Models.OfflineList.Dat>
|
||||
public class OfflineList : XmlFile<Models.OfflineList.Dat>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.OfflineList.Dat? obj, string? path)
|
||||
{
|
||||
var serializer = new OfflineList();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static System.IO.Stream? SerializeStream(Models.OfflineList.Dat? obj)
|
||||
{
|
||||
var serializer = new OfflineList();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
// All logic taken care of in the base class
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,7 @@ using SabreTools.Models.OpenMSX;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class OpenMSX :
|
||||
XmlFile<SoftwareDb>
|
||||
public class OpenMSX : XmlFile<SoftwareDb>
|
||||
{
|
||||
#region Constants
|
||||
|
||||
@@ -30,15 +29,16 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#endregion
|
||||
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="XmlFile.SerializeArray(T?, string?, string?, string?, string?)" />
|
||||
public override byte[]? SerializeArray(SoftwareDb? obj)
|
||||
=> SerializeArray(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(SoftwareDb? obj, string? path)
|
||||
{
|
||||
var serializer = new OpenMSX();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?, string?)" />
|
||||
public override bool Serialize(SoftwareDb? obj, string? path)
|
||||
=> Serialize(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
@@ -47,13 +47,6 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(SoftwareDb? obj)
|
||||
{
|
||||
var serializer = new OpenMSX();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?)" />
|
||||
public override Stream? Serialize(SoftwareDb? obj)
|
||||
=> Serialize(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
|
||||
@@ -3,51 +3,13 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.RomCenter;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class RomCenter :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
public class RomCenter : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(MetadataFile? obj, string? path)
|
||||
{
|
||||
var serializer = new RomCenter();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
using var stream = SerializeStream(obj);
|
||||
if (stream == null)
|
||||
return false;
|
||||
|
||||
using var fs = File.OpenWrite(path);
|
||||
stream.CopyTo(fs);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(MetadataFile? obj)
|
||||
{
|
||||
var serializer = new RomCenter();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
{
|
||||
// If the metadata file is null
|
||||
if (obj == null)
|
||||
@@ -199,7 +161,5 @@ namespace SabreTools.Serialization.Serializers
|
||||
writer.WriteLine();
|
||||
writer.Flush();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,39 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.SeparatedValue;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class SeparatedValue :
|
||||
IFileSerializer<MetadataFile>,
|
||||
IStreamSerializer<MetadataFile>
|
||||
// TODO: Create variants for the 3 common types: CSV, SSV, TSV
|
||||
public class SeparatedValue : BaseBinarySerializer<MetadataFile>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IByteSerializer.SerializeArray(T?)"/>
|
||||
public static byte[]? SerializeBytes(MetadataFile? obj, char delim = ',', bool longHeader = false)
|
||||
{
|
||||
var serializer = new SeparatedValue();
|
||||
return serializer.SerializeArray(obj, delim, longHeader);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[]? SerializeArray(MetadataFile? obj)
|
||||
=> SerializeArray(obj, ',', false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public byte[]? SerializeArray(MetadataFile? obj, char delim, bool longHeader)
|
||||
{
|
||||
using var stream = SerializeStream(obj, delim, longHeader);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
|
||||
@@ -21,7 +46,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Serialize(MetadataFile? obj, string? path)
|
||||
public override bool Serialize(MetadataFile? obj, string? path)
|
||||
=> Serialize(obj, path, ',', false);
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -51,7 +76,7 @@ namespace SabreTools.Serialization.Serializers
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Stream? Serialize(MetadataFile? obj)
|
||||
public override Stream? Serialize(MetadataFile? obj)
|
||||
=> Serialize(obj, ',', false);
|
||||
|
||||
/// <inheritdoc cref="Serialize(MetadataFile)"/>
|
||||
|
||||
@@ -2,8 +2,7 @@ using System.IO;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public class SoftwareList :
|
||||
XmlFile<Models.SoftwareList.SoftwareList>
|
||||
public class SoftwareList : XmlFile<Models.SoftwareList.SoftwareList>
|
||||
{
|
||||
#region Constants
|
||||
|
||||
@@ -31,13 +30,6 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IFileSerializer.Serialize(T?, string?)"/>
|
||||
public static bool SerializeFile(Models.SoftwareList.SoftwareList? obj, string? path)
|
||||
{
|
||||
var serializer = new SoftwareList();
|
||||
return serializer.Serialize(obj, path);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?, string?)" />
|
||||
public override bool Serialize(Models.SoftwareList.SoftwareList? obj, string? path)
|
||||
=> Serialize(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
@@ -46,13 +38,6 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <inheritdoc cref="Interfaces.IStreamSerializer.Serialize(T?)"/>
|
||||
public static Stream? SerializeStream(Models.SoftwareList.SoftwareList? obj)
|
||||
{
|
||||
var serializer = new SoftwareList();
|
||||
return serializer.Serialize(obj);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="XmlFile.Serialize(T?, string?, string?, string?, string?)" />
|
||||
public override Stream? Serialize(Models.SoftwareList.SoftwareList? obj)
|
||||
=> Serialize(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId);
|
||||
|
||||
@@ -3,8 +3,7 @@ using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public partial class XMID :
|
||||
IStringSerializer<Models.Xbox.XMID>
|
||||
public partial class XMID : IStringSerializer<Models.Xbox.XMID>
|
||||
{
|
||||
#region IStringSerializer
|
||||
|
||||
|
||||
@@ -3,8 +3,7 @@ using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
public partial class XeMID :
|
||||
IStringSerializer<Models.Xbox.XeMID>
|
||||
public partial class XeMID : IStringSerializer<Models.Xbox.XeMID>
|
||||
{
|
||||
#region IStringSerializer
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
using SabreTools.Serialization.Interfaces;
|
||||
|
||||
namespace SabreTools.Serialization.Serializers
|
||||
{
|
||||
@@ -10,14 +9,40 @@ namespace SabreTools.Serialization.Serializers
|
||||
/// Base class for other XML serializers
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class XmlFile<T> :
|
||||
IFileSerializer<T>,
|
||||
IStreamSerializer<T>
|
||||
public class XmlFile<T> : BaseBinarySerializer<T>
|
||||
{
|
||||
#region IByteSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override byte[]? SerializeArray(T? obj)
|
||||
=> SerializeArray(obj, null, null, null, null);
|
||||
|
||||
/// <summary>
|
||||
/// Serializes the defined type to a byte array
|
||||
/// </summary>
|
||||
/// <param name="obj">Data to serialize</param>
|
||||
/// <param name="name">Optional DOCTYPE name</param>
|
||||
/// <param name="pubid">Optional DOCTYPE pubid</param>
|
||||
/// <param name="sysid">Optional DOCTYPE sysid</param>
|
||||
/// <param name="subset">Optional DOCTYPE name</param>
|
||||
/// <returns>Byte array containing serialized data on success, null otherwise</returns>
|
||||
public byte[]? SerializeArray(T? obj, string? name = null, string? pubid = null, string? sysid = null, string? subset = null)
|
||||
{
|
||||
using var stream = Serialize(obj, name, pubid, sysid, subset);
|
||||
if (stream == null)
|
||||
return null;
|
||||
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IFileSerializer
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual bool Serialize(T? obj, string? path)
|
||||
public override bool Serialize(T? obj, string? path)
|
||||
=> Serialize(obj, path, null, null, null, null);
|
||||
|
||||
/// <summary>
|
||||
@@ -49,12 +74,8 @@ namespace SabreTools.Serialization.Serializers
|
||||
|
||||
#region IStreamSerializer
|
||||
|
||||
/// <summary>
|
||||
/// Serializes the defined type to a stream
|
||||
/// </summary>
|
||||
/// <param name="obj">Data to serialize</param>
|
||||
/// <returns>Stream containing serialized data on success, null otherwise</returns>
|
||||
public virtual Stream? Serialize(T? obj)
|
||||
/// <inheritdoc/>
|
||||
public override Stream? Serialize(T? obj)
|
||||
=> Serialize(obj, null, null, null, null);
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user