Fix not being able to serialise converted beatmaps

This commit is contained in:
smoogipoo 2020-04-21 14:52:58 +09:00
parent 21949ac499
commit a702a521f8
1 changed files with 8 additions and 7 deletions

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@ -43,13 +44,13 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
var list = new List<T>(); var list = new List<T>();
var obj = JObject.Load(reader); var obj = JObject.Load(reader);
var lookupTable = serializer.Deserialize<List<string>>(obj["lookup_table"].CreateReader()); var lookupTable = serializer.Deserialize<List<string>>(obj["$lookup_table"].CreateReader());
foreach (var tok in obj["items"]) foreach (var tok in obj["$items"])
{ {
var itemReader = tok.CreateReader(); var itemReader = tok.CreateReader();
var typeName = lookupTable[(int)tok["type"]]; var typeName = lookupTable[(int)tok["$type"]];
var instance = (T)Activator.CreateInstance(Type.GetType(typeName)); var instance = (T)Activator.CreateInstance(Type.GetType(typeName));
serializer.Populate(itemReader, instance); serializer.Populate(itemReader, instance);
@ -61,7 +62,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{ {
var list = (List<T>)value; var list = (IList)value;
var lookupTable = new List<string>(); var lookupTable = new List<string>();
var objects = new List<JObject>(); var objects = new List<JObject>();
@ -84,16 +85,16 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
} }
var itemObject = JObject.FromObject(item, serializer); var itemObject = JObject.FromObject(item, serializer);
itemObject.AddFirst(new JProperty("type", typeId)); itemObject.AddFirst(new JProperty("$type", typeId));
objects.Add(itemObject); objects.Add(itemObject);
} }
writer.WriteStartObject(); writer.WriteStartObject();
writer.WritePropertyName("lookup_table"); writer.WritePropertyName("$lookup_table");
serializer.Serialize(writer, lookupTable); serializer.Serialize(writer, lookupTable);
writer.WritePropertyName("items"); writer.WritePropertyName("$items");
serializer.Serialize(writer, objects); serializer.Serialize(writer, objects);
writer.WriteEndObject(); writer.WriteEndObject();