@@ -6,7 +6,13 @@ using System.Collections.Generic;
66using System.Linq;
77using System.Net.Http;
88using System.Threading.Tasks;
9+
10+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'}}
911using Newtonsoft.Json;
12+ {{/ifTemplate}}
13+ {{ifTemplate 'JsonConverter' 'System.Text.Json'}}
14+ using System.Text.Json;
15+ {{/ifTemplate}}
1016
1117#line hidden
1218
@@ -22,13 +28,22 @@ namespace {{Namespace}}
2228}
2329{{~/if~}}
2430
31+ {{!# JsonConverter}} Newtonsoft.Json
32+
2533{{!# HttpClientName}} HttpClient
2634{{!# ClientExceptionBaseClass}} Exception
2735{{!# interfaceBase }}
2836{{!# jsonConverters }}
2937{{!# BeforeInterfaceOperation}}
3038{{!# StringifyEnums}} true
3139
40+ {{!# JsonPropertyAttributeName}}
41+ {{~ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}JsonProperty{{~/ifTemplate~}}
42+ {{~ifTemplate 'JsonConverter' 'System.Text.Json'}}System.Text.Json.Serialization.JsonPropertyName{{~/ifTemplate~}}
43+ {{!# JsonConverterAttributeName}}
44+ {{~ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}JsonConverter{{~/ifTemplate~}}
45+ {{~ifTemplate 'JsonConverter' 'System.Text.Json'}}System.Text.Json.Serialization.JsonConverter{{~/ifTemplate~}}
46+
3247{{!# ClientException}}
3348 public sealed class {{ClassName}}Exception : {{> ClientExceptionBaseClass}}
3449 {
@@ -75,30 +90,57 @@ namespace {{Namespace}}
7590{{!# ClientClass}}
7691 public sealed class {{ClassName}} : I{{ClassName}}
7792 {
93+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
7894 private static JsonSerializerSettings jsonSettings = new JsonSerializerSettings()
7995 {
8096 Converters =
8197 {
8298 new Newtonsoft.Json.Converters.StringEnumConverter(camelCaseText: false),
8399 {{ > jsonConverters }}
84100 }
101+ };{{~/ifTemplate}}
102+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
103+ private static JsonSerializerOptions jsonOptions = new JsonSerializerOptions()
104+ {
105+ Converters =
106+ {
107+ new System.Text.Json.Serialization.JsonStringEnumConverter(),
108+ {{ > jsonConverters }}
109+ }
85110 };
111+ {{~/ifTemplate}}
86112
87113 private string SerializeBody(GraphQLRequest request)
88114 {
89- return JsonConvert.SerializeObject(request, jsonSettings);
115+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
116+ return JsonConvert.SerializeObject(request, jsonSettings);
117+ {{~/ifTemplate}}
118+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
119+ return JsonSerializer.Serialize(request, jsonOptions);
120+ {{~/ifTemplate}}
90121 }
91122
92123 private async Task<GraphQLResponseData<T>> DeserializeBodyAsync<T>(HttpResponseMessage response)
93124 {
94125 var jsonResult = await response.Content.ReadAsStringAsync();
126+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
95127 var errorsResult = JsonConvert.DeserializeObject<GraphQLResponseErrors<T>>(jsonResult, jsonSettings);
128+ {{~/ifTemplate}}
129+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
130+ var errorsResult = JsonSerializer.Deserialize<GraphQLResponseErrors<T>>(jsonResult, jsonOptions);
131+ {{~/ifTemplate}}
96132
97133 if (errorsResult.errors?.Any() == true) {
98134 throw new {{ClassName}}Exception(errorsResult.errors.Select(x => x.Message), response);
99135 }
100136
101- var result = JsonConvert.DeserializeObject<GraphQLResponseData<T>>(jsonResult, jsonSettings);
137+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
138+ var result = JsonConvert.DeserializeObject<GraphQLResponseData<T>>(jsonResult, jsonSettings);
139+ {{~/ifTemplate}}
140+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
141+ var result = JsonSerializer.Deserialize<GraphQLResponseData<T>>(jsonResult, jsonOptions);
142+ {{~/ifTemplate}}
143+
102144 return result;
103145 }
104146
@@ -153,7 +195,7 @@ namespace {{Namespace}}
153195 public sealed class {{pascalCase Name}} {{#each~ Interfaces}}{{~#if @first}}: {{else}}, {{/if~}}I{{pascalCase .}}{{~/each}}
154196 {
155197 {{#each Fields}}
156- [JsonProperty ("{{Name}}")]
198+ [{{> JsonPropertyAttributeName}} ("{{Name}}")]
157199 public {{> TypeReference Type}} {{pascalCase Name}} { get; set; }
158200 {{/each}}
159201 }
@@ -170,7 +212,7 @@ namespace {{Namespace}}
170212{{!# Enum}}
171213
172214 {{ifTemplate 'StringifyEnums' 'true'}}
173- [JsonConverter (typeof({{pascalCase Name}}.CustomJsonStringifiedEnumConverter))]
215+ [{{> JsonConverterAttributeName}} (typeof({{pascalCase Name}}.CustomJsonStringifiedEnumConverter))]
174216 public class {{pascalCase Name}}
175217 {
176218 static Dictionary<string, {{pascalCase Name}}> lookup = new Dictionary<string, {{pascalCase Name}}>();
@@ -212,7 +254,8 @@ namespace {{Namespace}}
212254 public static readonly {{pascalCase ../Name}} {{pascalCase .}} = Create("{{.}}", true);
213255 {{/each}}
214256
215- internal class CustomJsonStringifiedEnumConverter : JsonConverter
257+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
258+ internal class CustomJsonStringifiedEnumConverter : JsonConverter
216259 {
217260 public override bool CanConvert(Type objectType)
218261 {
@@ -238,9 +281,41 @@ namespace {{Namespace}}
238281 }
239282 }
240283 }
284+ {{~/ifTemplate}}
285+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
286+ internal class CustomJsonStringifiedEnumConverter : System.Text.Json.Serialization.JsonConverter<{{pascalCase Name}}>
287+ {
288+ public override bool CanConvert(Type typeToConvert)
289+ {
290+ return typeof({{pascalCase Name}}).IsAssignableFrom(typeToConvert);
291+ }
292+
293+ public override Episode Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
294+ {
295+ return reader.GetString();
296+ }
297+
298+ public override void Write(Utf8JsonWriter writer, {{pascalCase Name}} value, JsonSerializerOptions options)
299+ {
300+ if(value is null) {
301+ writer.WriteNullValue();
302+ }
303+ else
304+ {
305+ writer.WriteStringValue(value.Value);
306+ }
307+ }
308+ }
309+ {{~/ifTemplate}}
241310 }
242311 {{else}}
243- [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
312+
313+ {{ifTemplate 'JsonConverter' 'Newtonsoft.Json'~}}
314+ [{{> JsonConverterAttributeName}}(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
315+ {{/ifTemplate~}}
316+ {{ifTemplate 'JsonConverter' 'System.Text.Json'~}}
317+ [{{> JsonConverterAttributeName}}(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))]
318+ {{/ifTemplate~}}
244319 public enum {{pascalCase Name}}
245320 {
246321 {{#each Values}}
0 commit comments