using System.Collections;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using GraphQL.Client.Serializer.Newtonsoft;
using GraphQL.Client.Abstractions.Utilities;
public sealed class ConstantCaseNamingStrategy : NamingStrategy
protected override string ResolvePropertyName(string name) => name.ToConstantCase();
public enum SomeEnumTypes: byte
public enum SomeEnumFlagTypes: byte
public SomeEnumTypes SomeEnumTypes { get; set; }
public static void Test()
TestFixedNewtonsoftJsonSerializer();
TestSystemTextJsonSerializer();
TestNewtonsoftJsonSerializer();
static void TestSystemTextJsonSerializer()
var serializer = new GraphQL.Client.Serializer.SystemTextJson.SystemTextJsonSerializer();
TestSystemTextJsonSerializer(serializer);
public static void TestFixedNewtonsoftJsonSerializer()
new NewtonsoftJsonSerializer(
options.Converters.Insert(
0, new StringEnumConverter(new ConstantCaseNamingStrategy())));
TestNewtonsoftJsonSerializer(serializer);
public static void TestNewtonsoftJsonSerializer()
var serializer = new NewtonsoftJsonSerializer();
TestNewtonsoftJsonSerializer(serializer);
public static void TestNewtonsoftJsonSerializer(NewtonsoftJsonSerializer serializer)
Console.WriteLine("Testing Newtonsoft.Json with {0}", serializer.JsonSerializerSettings.Converters.Where(c => c.CanConvert(typeof(SomeEnumTypes))).FirstOrDefault());
var settings = serializer.JsonSerializerSettings;
var json = JsonConvert.SerializeObject(SomeEnumTypes.SecondItem, settings);
var json2 = JsonConvert.SerializeObject(SomeEnumFlagTypes.FlagItemThree, settings);
var json3 = JsonConvert.SerializeObject(SomeEnumFlagTypes.FlagItemOne | SomeEnumFlagTypes.FlagItemThree, settings);
Console.WriteLine(json2);
Console.WriteLine(json3);
Assert.That(SomeEnumTypes.SecondItem == JsonConvert.DeserializeObject<SomeEnumTypes>(json, settings));
Assert.That(SomeEnumFlagTypes.FlagItemThree == JsonConvert.DeserializeObject<SomeEnumFlagTypes>(json2, settings));
Assert.That((SomeEnumFlagTypes.FlagItemOne | SomeEnumFlagTypes.FlagItemThree) == JsonConvert.DeserializeObject<SomeEnumFlagTypes>(json3, settings));
public static void TestSystemTextJsonSerializer(GraphQL.Client.Serializer.SystemTextJson.SystemTextJsonSerializer serializer)
Console.WriteLine("Testing System.Text.Json:");
var options = serializer.Options;
var json = System.Text.Json.JsonSerializer.Serialize(SomeEnumTypes.SecondItem, options);
var json2 = System.Text.Json.JsonSerializer.Serialize(SomeEnumFlagTypes.FlagItemThree, options);
var json3 = System.Text.Json.JsonSerializer.Serialize(SomeEnumFlagTypes.FlagItemOne | SomeEnumFlagTypes.FlagItemThree, options);
Console.WriteLine(json2);
Console.WriteLine(json3);
Assert.That(SomeEnumTypes.SecondItem == System.Text.Json.JsonSerializer.Deserialize<SomeEnumTypes>(json, options));
Assert.That(SomeEnumFlagTypes.FlagItemThree == System.Text.Json.JsonSerializer.Deserialize<SomeEnumFlagTypes>(json2, options));
Assert.That((SomeEnumFlagTypes.FlagItemOne | SomeEnumFlagTypes.FlagItemThree) == System.Text.Json.JsonSerializer.Deserialize<SomeEnumFlagTypes>(json3, options));
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("{0} version: {1}", typeof(JsonSerializer).Namespace, typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("{0} version: {1}", typeof(GraphQL.Client.Serializer.Newtonsoft.NewtonsoftJsonSerializer).Namespace, typeof(GraphQL.Client.Serializer.Newtonsoft.NewtonsoftJsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");