kyy
2025-07-02 07558e32634314eec359ec8437d97bdc5def64f9
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright © 2021 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
 
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
 
namespace CefSharp.Internals.Json
{
    /// <summary>
    /// System.Text.Json Enum Converter for the DevToolsClient
    /// Only handles enums as strings and converts from .Net naming
    /// to the naming convention used by DevTools protocol
    /// </summary>
    /// <typeparam name="T">type</typeparam>
    /// <remarks>
    /// There aren't any Type constraints on T currently, we just rely on the
    /// <see cref="JsonEnumConverterFactory"/> to only use this for
    /// Enum and Nullable Enum
    /// </remarks>
    public class JsonEnumConverter<T> : JsonConverter<T>
    {
        /// <inheritdoc/>
        public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            var nullableType = Nullable.GetUnderlyingType(typeToConvert);
            var val = reader.GetString();
 
            if (nullableType == null)
            {
                return (T)JsonEnumConverterFactory.ConvertStringToEnum(val, typeToConvert);
            }
 
            if(string.IsNullOrEmpty(val))
            {
                return default;
            }
 
            return (T)JsonEnumConverterFactory.ConvertStringToEnum(val, nullableType);
        }
 
        /// <inheritdoc/>
        public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
        {
            //Not called when the Nullable enum value is null so we don't need to perform any sort of null checking
            var str = JsonEnumConverterFactory.ConvertEnumToString(value);
 
            writer.WriteStringValue(str);
        }        
    }
}