Skip to content

Commit 7da756c

Browse files
committed
feat: add json conversion contexts sourcegen
1 parent f301a31 commit 7da756c

2 files changed

Lines changed: 86 additions & 19 deletions

File tree

Core/Helpers/Json/ConfiguredJsonSerializer.cs

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,27 +61,35 @@ public static T DeserializeFromFileBundle<T>(FileBundle bundle)
6161

6262
private static JsonSerializerOptions GetOptions()
6363
{
64-
if (_serializerOptions == null) _serializerOptions = new()
64+
if (_serializerOptions == null)
6565
{
66-
IncludeFields = true,
67-
WriteIndented = true,
68-
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
69-
Converters = {
70-
new RoundTripFloatConverter(),
71-
new JsonStringEnumConverter(),
72-
new Vector2JsonConverter(),
73-
new Vector3JsonConverter(),
74-
new QuaternionJsonConverter(),
75-
new ColorJsonConverter(),
76-
new TimeSpanJsonConverter(),
77-
new TrileEmplacementJsonConverter(),
78-
new TrileEmplacementListJsonConverter(),
79-
new ScriptTriggerJsonConverter(),
80-
new ScriptConditionJsonConverter(),
81-
new ScriptActionJsonConverter(),
82-
new OrderedDictionaryConverterFactory(),
66+
_serializerOptions = new()
67+
{
68+
IncludeFields = true,
69+
WriteIndented = true,
70+
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
71+
Converters = {
72+
new RoundTripFloatConverter(),
73+
new JsonStringEnumConverter(),
74+
new Vector2JsonConverter(),
75+
new Vector3JsonConverter(),
76+
new QuaternionJsonConverter(),
77+
new ColorJsonConverter(),
78+
new TimeSpanJsonConverter(),
79+
new TrileEmplacementJsonConverter(),
80+
new TrileEmplacementListJsonConverter(),
81+
new ScriptTriggerJsonConverter(),
82+
new ScriptConditionJsonConverter(),
83+
new ScriptActionJsonConverter(),
84+
new OrderedDictionaryConverterFactory(),
85+
}
86+
};
87+
88+
foreach (var context in JsonContexts.List)
89+
{
90+
_serializerOptions.TypeInfoResolverChain.Add(context);
8391
}
84-
};
92+
}
8593

8694
return _serializerOptions;
8795
}

Core/Helpers/Json/JsonContexts.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System.Text.Json.Serialization;
2+
3+
using FEZRepacker.Core.Definitions.Game.ArtObject;
4+
using FEZRepacker.Core.Definitions.Game.Graphics;
5+
using FEZRepacker.Core.Definitions.Game.NpcMetadata;
6+
using FEZRepacker.Core.Definitions.Game.Sky;
7+
using FEZRepacker.Core.Definitions.Game.TrackedSong;
8+
using FEZRepacker.Core.Definitions.Game.TrileSet;
9+
using FEZRepacker.Core.Definitions.Game.XNA;
10+
using FEZRepacker.Core.Definitions.Json;
11+
12+
namespace FEZRepacker.Core.Helpers.Json
13+
{
14+
internal static class JsonContexts
15+
{
16+
public static List<JsonSerializerContext> List =>
17+
[
18+
ArtObjectJsonSerializerContext.Default,
19+
LevelJsonSerializerContext.Default,
20+
MapTreeJsonSerializerContext.Default,
21+
NpcMetadataJsonSerializerContext.Default,
22+
SkyJsonSerializerContext.Default,
23+
SpriteFontJsonSerializerContext.Default,
24+
TextStorageJsonSerializerContext.Default,
25+
TrackedSongJsonSerializerContext.Default,
26+
TrileSetJsonSerializerContext.Default
27+
];
28+
}
29+
30+
[JsonSerializable(typeof(ArtObject))]
31+
[JsonSerializable(typeof(IndexedPrimitives<VertexInstance, Matrix>))]
32+
internal partial class ArtObjectJsonSerializerContext : JsonSerializerContext {}
33+
34+
[JsonSerializable(typeof(LevelJsonModel))]
35+
internal partial class LevelJsonSerializerContext : JsonSerializerContext {}
36+
37+
[JsonSerializable(typeof(MapTreeJsonModel))]
38+
internal partial class MapTreeJsonSerializerContext : JsonSerializerContext {}
39+
40+
[JsonSerializable(typeof(NpcMetadata))]
41+
internal partial class NpcMetadataJsonSerializerContext : JsonSerializerContext {}
42+
43+
[JsonSerializable(typeof(Sky))]
44+
internal partial class SkyJsonSerializerContext : JsonSerializerContext {}
45+
46+
[JsonSerializable(typeof(SpriteFontPropertiesJsonModel))]
47+
internal partial class SpriteFontJsonSerializerContext : JsonSerializerContext {}
48+
49+
[JsonSerializable(typeof(OrderedDictionary<string, OrderedDictionary<string, string>>))]
50+
internal partial class TextStorageJsonSerializerContext : JsonSerializerContext {}
51+
52+
[JsonSerializable(typeof(TrackedSong))]
53+
internal partial class TrackedSongJsonSerializerContext : JsonSerializerContext {}
54+
55+
[JsonSerializable(typeof(TrileSet))]
56+
[JsonSerializable(typeof(IndexedPrimitives<VertexInstance, Vector4>))]
57+
58+
internal partial class TrileSetJsonSerializerContext : JsonSerializerContext {}
59+
}

0 commit comments

Comments
 (0)