diff --git a/osu.Game/IO/Serialization/Converters/TypedListConverter.cs b/osu.Game/IO/Serialization/Converters/TypedListConverter.cs index 32b7772092..7147f9110e 100644 --- a/osu.Game/IO/Serialization/Converters/TypedListConverter.cs +++ b/osu.Game/IO/Serialization/Converters/TypedListConverter.cs @@ -45,13 +45,13 @@ namespace osu.Game.IO.Serialization.Converters var obj = JObject.Load(reader); var lookupTable = new List(); - serializer.Populate(obj["LookupTable"].CreateReader(), lookupTable); + serializer.Populate(obj["lookup_table"].CreateReader(), lookupTable); - foreach (var tok in obj["Items"]) + foreach (var tok in obj["items"]) { var itemReader = tok.CreateReader(); - var typeName = lookupTable[(int)tok["Type"]]; + var typeName = lookupTable[(int)tok["type"]]; var instance = (T)Activator.CreateInstance(Type.GetType(typeName)); serializer.Populate(itemReader, instance); @@ -84,16 +84,16 @@ namespace osu.Game.IO.Serialization.Converters } var itemObject = JObject.FromObject(item, serializer); - itemObject.AddFirst(new JProperty("Type", typeId)); + itemObject.AddFirst(new JProperty("type", typeId)); objects.Add(itemObject); } writer.WriteStartObject(); - writer.WritePropertyName("LookupTable"); + writer.WritePropertyName("lookup_table"); serializer.Serialize(writer, lookupTable); - writer.WritePropertyName("Items"); + writer.WritePropertyName("items"); serializer.Serialize(writer, objects); writer.WriteEndObject(); diff --git a/osu.Game/IO/Serialization/Converters/Vector2Converter.cs b/osu.Game/IO/Serialization/Converters/Vector2Converter.cs index 5f21018fd5..87fbd31d21 100644 --- a/osu.Game/IO/Serialization/Converters/Vector2Converter.cs +++ b/osu.Game/IO/Serialization/Converters/Vector2Converter.cs @@ -18,7 +18,7 @@ namespace osu.Game.IO.Serialization.Converters public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var obj = JObject.Load(reader); - return new Vector2((float)obj["X"], (float)obj["Y"]); + return new Vector2((float)obj["x"], (float)obj["y"]); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) @@ -27,9 +27,9 @@ namespace osu.Game.IO.Serialization.Converters writer.WriteStartObject(); - writer.WritePropertyName("X"); + writer.WritePropertyName("x"); writer.WriteValue(vector.X); - writer.WritePropertyName("Y"); + writer.WritePropertyName("y"); writer.WriteValue(vector.Y); writer.WriteEndObject(); diff --git a/osu.Game/IO/Serialization/IJsonSerializable.cs b/osu.Game/IO/Serialization/IJsonSerializable.cs index 38e7f47656..892c266fe3 100644 --- a/osu.Game/IO/Serialization/IJsonSerializable.cs +++ b/osu.Game/IO/Serialization/IJsonSerializable.cs @@ -30,7 +30,8 @@ namespace osu.Game.IO.Serialization Formatting = Formatting.Indented, ObjectCreationHandling = ObjectCreationHandling.Replace, DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate, - Converters = new JsonConverter[] { new Vector2Converter() } + Converters = new JsonConverter[] { new Vector2Converter() }, + ContractResolver = new KeyContractResolver() }; } } diff --git a/osu.Game/IO/Serialization/KeyContractResolver.cs b/osu.Game/IO/Serialization/KeyContractResolver.cs new file mode 100644 index 0000000000..10375646ce --- /dev/null +++ b/osu.Game/IO/Serialization/KeyContractResolver.cs @@ -0,0 +1,16 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Humanizer; +using Newtonsoft.Json.Serialization; + +namespace osu.Game.IO.Serialization +{ + public class KeyContractResolver : DefaultContractResolver + { + protected override string ResolvePropertyName(string propertyName) + { + return propertyName.Underscore(); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 9e5d4291ce..a2d4a00110 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -272,6 +272,7 @@ + 20171019041408_InitialCreate.cs