mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 12:35:34 +08:00
Add flag to explicitly serialize the type version
This commit is contained in:
parent
9e51480aa3
commit
d026587a91
@ -16,6 +16,26 @@ namespace osu.Game.IO.Serialization.Converters
|
|||||||
/// <typeparam name="T">The type of objects contained in the <see cref="List<T>"/> this attribute is attached to.</typeparam>
|
/// <typeparam name="T">The type of objects contained in the <see cref="List<T>"/> this attribute is attached to.</typeparam>
|
||||||
public class TypedListConverter<T> : JsonConverter
|
public class TypedListConverter<T> : JsonConverter
|
||||||
{
|
{
|
||||||
|
private readonly bool requiresTypeVersion;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a new <see cref="TypedListConverter{T}"/>.
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once UnusedMember.Global
|
||||||
|
public TypedListConverter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a new <see cref="TypedListConverter{T}"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="requiresTypeVersion">Whether the version of the type should be serialized.</param>
|
||||||
|
// ReSharper disable once UnusedMember.Global (Used in Beatmap)
|
||||||
|
public TypedListConverter(bool requiresTypeVersion)
|
||||||
|
{
|
||||||
|
this.requiresTypeVersion = requiresTypeVersion;
|
||||||
|
}
|
||||||
|
|
||||||
public override bool CanConvert(Type objectType) => objectType == typeof(List<T>);
|
public override bool CanConvert(Type objectType) => objectType == typeof(List<T>);
|
||||||
|
|
||||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||||
@ -49,12 +69,17 @@ namespace osu.Game.IO.Serialization.Converters
|
|||||||
var objects = new List<JObject>();
|
var objects = new List<JObject>();
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
var type = item.GetType().AssemblyQualifiedName;
|
var type = item.GetType();
|
||||||
|
var assemblyName = type.Assembly.GetName();
|
||||||
|
|
||||||
int typeId = lookupTable.IndexOf(type);
|
var typeString = $"{type.FullName}, {assemblyName.Name}";
|
||||||
|
if (requiresTypeVersion)
|
||||||
|
typeString += $", {assemblyName.Version}";
|
||||||
|
|
||||||
|
int typeId = lookupTable.IndexOf(typeString);
|
||||||
if (typeId == -1)
|
if (typeId == -1)
|
||||||
{
|
{
|
||||||
lookupTable.Add(type);
|
lookupTable.Add(typeString);
|
||||||
typeId = lookupTable.Count - 1;
|
typeId = lookupTable.Count - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user