summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Serialization/GuiJsonSerializerOptionsProvider.cs
blob: 5ebc880fcca647aa4166a8c67f520b9cd49d58de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Xna.Framework.Content;
using MonoGame.Extended.BitmapFonts;
using MonoGame.Extended.Serialization;

namespace MonoGame.Extended.Gui.Serialization;

public static class GuiJsonSerializerOptionsProvider
{
    public static JsonSerializerOptions GetOptions(ContentManager contentManager, params Type[] customControlTypes)
    {
        var options = new JsonSerializerOptions
        {
            WriteIndented = true,
            DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
        };

        var textureRegionService = new GuiTextureRegionService();

        options.Converters.Add(new Vector2JsonConverter());
        options.Converters.Add(new SizeJsonConverter());
        options.Converters.Add(new Size2JsonConverter());
        options.Converters.Add(new ColorJsonConverter());
        options.Converters.Add(new ThicknessJsonConverter());
        options.Converters.Add(new ContentManagerJsonConverter<BitmapFont>(contentManager, font => font.Name));
        options.Converters.Add(new ControlStyleJsonConverter(customControlTypes));
        options.Converters.Add(new GuiTextureAtlasJsonConverter(contentManager, textureRegionService));
        options.Converters.Add(new GuiNinePatchRegion2DJsonConverter(textureRegionService));
        options.Converters.Add(new TextureRegion2DJsonConverter(textureRegionService));
        options.Converters.Add(new VerticalAlignmentConverter());
        options.Converters.Add(new HorizontalAlignmentConverter());

        return options;
    }
}