From 554c858944303ba0d78a0309969c0864ec9f0fe5 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 28 Nov 2018 19:47:20 +0900 Subject: [PATCH] Fix mods not deserializing properly --- osu.Game/Scoring/ScoreInfo.cs | 38 +++++++++++++++-------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/osu.Game/Scoring/ScoreInfo.cs b/osu.Game/Scoring/ScoreInfo.cs index 056bec1d8c..860af64c62 100644 --- a/osu.Game/Scoring/ScoreInfo.cs +++ b/osu.Game/Scoring/ScoreInfo.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; -using JetBrains.Annotations; using Newtonsoft.Json; using osu.Game.Beatmaps; using osu.Game.Database; @@ -39,22 +38,27 @@ public class ScoreInfo : IHasFiles, IHasPrimaryKey, ISoftDelete public RulesetInfo Ruleset { get; set; } - [NotMapped] - [JsonIgnore] - public Mod[] Mods { get; set; } = { }; + [NotMapped, JsonIgnore] + public Mod[] Mods + { + get + { + var deserialized = JsonConvert.DeserializeObject(modsString); + return Ruleset.CreateInstance().GetAllMods().Where(mod => deserialized.Any(d => d == mod.ShortenedName)).ToArray(); + } + set => modsString = JsonConvert.SerializeObject(value.Select(m => m.ShortenedName).ToArray()); + } + + [NotMapped, JsonIgnore] + private string modsString; public string ModsString { - get => JsonConvert.SerializeObject(Mods); - set - { - var deserialized = JsonConvert.DeserializeObject(value); - Mods = Ruleset.CreateInstance().GetAllMods().Where(mod => deserialized.Any(d => d.ShortenedName == mod.ShortenedName)).ToArray(); - } + get => modsString; + set => modsString = value; } - [NotMapped] - [JsonIgnore] + [NotMapped, JsonIgnore] public User User; public string UserString @@ -82,15 +86,5 @@ public string UserString public List Files { get; set; } public bool DeletePending { get; set; } - - [UsedImplicitly] - private class SerializableMod : Mod - { - public override string Name => ShortenedName; - - public override string ShortenedName { get; } = string.Empty; - - public override double ScoreMultiplier => 0; - } } }