summaryrefslogtreecommitdiffstats
path: root/generator/plugins/dotnet/custom/DocumentSelectorConverter.cs
blob: 3124416bc7e04a7462a3704981732d8f297e70b7 (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
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;

public class DocumentSelectorConverter : JsonConverter<DocumentSelector>
{
    public override void WriteJson(JsonWriter writer, DocumentSelector? value, JsonSerializer serializer)
    {
        if (value is null)
        {
            writer.WriteNull();
        }
        else
        {
            serializer.Serialize(writer, (DocumentFilter[])value);
        }
    }

    public override DocumentSelector ReadJson(JsonReader reader, Type objectType, DocumentSelector? existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
        {
            return null!;
        }
        var token = JToken.Load(reader);
        if (token.Type == JTokenType.Array)
        {
            var filters = token.ToObject<DocumentFilter[]>(serializer);
            return new DocumentSelector(filters ?? Array.Empty<DocumentFilter>());
        }

        throw new JsonSerializationException("Invalid JSON for DocumentSelector");
    }
}