Skip to content

Commit cf185d5

Browse files
authored
Expose JsonSerializerSettings in ApiClient (#7582)
* Expose JsonSerializerSettings in ApiClient * Update generated petstore sample * Add XML comments for SerializerSettings and match new OverrideSpecifiedNames default * Add GetSerializerSettingsTest
1 parent 4dc8d2a commit cf185d5

File tree

7 files changed

+109
-12
lines changed

7 files changed

+109
-12
lines changed

modules/openapi-generator/src/main/resources/csharp-netcore/ApiClient.mustache

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,23 @@ namespace {{packageName}}.Client
160160
{
161161
private readonly String _baseUrl;
162162
163+
/// <summary>
164+
/// Specifies the settings on a <see cref="JsonSerializer" /> object.
165+
/// These settings can be adjusted to accomodate custom serialization rules.
166+
/// </summary>
167+
public JsonSerializerSettings SerializerSettings { get; set; } = new JsonSerializerSettings
168+
{
169+
// OpenAPI generated types generally hide default constructors.
170+
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
171+
ContractResolver = new DefaultContractResolver
172+
{
173+
NamingStrategy = new CamelCaseNamingStrategy
174+
{
175+
OverrideSpecifiedNames = false
176+
}
177+
}
178+
};
179+
163180
/// <summary>
164181
/// Allows for extending request processing for <see cref="ApiClient"/> generated code.
165182
/// </summary>
@@ -258,7 +275,7 @@ namespace {{packageName}}.Client
258275
RestRequest request = new RestRequest(Method(method))
259276
{
260277
Resource = path,
261-
JsonSerializer = new CustomJsonCodec(configuration)
278+
JsonSerializer = new CustomJsonCodec(SerializerSettings, configuration)
262279
};
263280

264281
if (options.PathParameters != null)
@@ -406,7 +423,7 @@ namespace {{packageName}}.Client
406423
}
407424
else
408425
{
409-
var customDeserializer = new CustomJsonCodec(configuration);
426+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
410427
client.AddHandler("application/json", () => customDeserializer);
411428
client.AddHandler("text/json", () => customDeserializer);
412429
client.AddHandler("text/x-json", () => customDeserializer);
@@ -509,7 +526,7 @@ namespace {{packageName}}.Client
509526
}
510527
else
511528
{
512-
var customDeserializer = new CustomJsonCodec(configuration);
529+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
513530
client.AddHandler("application/json", () => customDeserializer);
514531
client.AddHandler("text/json", () => customDeserializer);
515532
client.AddHandler("text/x-json", () => customDeserializer);

modules/openapi-generator/src/main/resources/csharp/ApiClient.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace {{packageName}}.Client
3030
/// </summary>
3131
{{>visibility}} partial class ApiClient
3232
{
33-
private JsonSerializerSettings serializerSettings = new JsonSerializerSettings
33+
public JsonSerializerSettings serializerSettings = new JsonSerializerSettings
3434
{
3535
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
3636
};
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using System.IO;
3+
using System.Collections.Generic;
4+
using System.Collections.ObjectModel;
5+
using System.Linq;
6+
using System.Reflection;
7+
using Newtonsoft.Json;
8+
using Newtonsoft.Json.Serialization;
9+
using RestSharp;
10+
using Xunit;
11+
12+
using Org.OpenAPITools.Client;
13+
using Org.OpenAPITools.Api;
14+
using Org.OpenAPITools.Model;
15+
16+
namespace Org.OpenAPITools.Test
17+
{
18+
/// <summary>
19+
/// Class for testing ApiClient
20+
/// </summary>
21+
public class ApiClientTests
22+
{
23+
public ApiClientTests()
24+
{
25+
}
26+
27+
/// <summary>
28+
/// Test GetSerializerSettingsTest
29+
/// </summary>
30+
[Fact]
31+
public void GetSerializerSettingsTest()
32+
{
33+
ApiClient apiClient = new ApiClient();
34+
35+
var serializerSettingsPropertyInfo = typeof(ApiClient).GetProperty(nameof(ApiClient.SerializerSettings));
36+
37+
// Validate that we can the set the SerializerSettings (public visibility)
38+
Assert.NotNull(serializerSettingsPropertyInfo?.GetSetMethod());
39+
40+
// Validate default serializer settings
41+
Assert.NotNull(apiClient.SerializerSettings);
42+
Assert.Equal(ConstructorHandling.AllowNonPublicDefaultConstructor, apiClient.SerializerSettings.ConstructorHandling);
43+
Assert.False(((DefaultContractResolver)apiClient.SerializerSettings.ContractResolver).NamingStrategy.OverrideSpecifiedNames);
44+
}
45+
}
46+
}

samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,23 @@ public partial class ApiClient : ISynchronousClient, IAsynchronousClient
164164
{
165165
private readonly String _baseUrl;
166166

167+
/// <summary>
168+
/// Specifies the settings on a <see cref="JsonSerializer" /> object.
169+
/// These settings can be adjusted to accomodate custom serialization rules.
170+
/// </summary>
171+
public JsonSerializerSettings SerializerSettings { get; set; } = new JsonSerializerSettings
172+
{
173+
// OpenAPI generated types generally hide default constructors.
174+
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
175+
ContractResolver = new DefaultContractResolver
176+
{
177+
NamingStrategy = new CamelCaseNamingStrategy
178+
{
179+
OverrideSpecifiedNames = false
180+
}
181+
}
182+
};
183+
167184
/// <summary>
168185
/// Allows for extending request processing for <see cref="ApiClient"/> generated code.
169186
/// </summary>
@@ -262,7 +279,7 @@ private RestRequest NewRequest(
262279
RestRequest request = new RestRequest(Method(method))
263280
{
264281
Resource = path,
265-
JsonSerializer = new CustomJsonCodec(configuration)
282+
JsonSerializer = new CustomJsonCodec(SerializerSettings, configuration)
266283
};
267284

268285
if (options.PathParameters != null)
@@ -410,7 +427,7 @@ private ApiResponse<T> Exec<T>(RestRequest req, IReadableConfiguration configura
410427
}
411428
else
412429
{
413-
var customDeserializer = new CustomJsonCodec(configuration);
430+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
414431
client.AddHandler("application/json", () => customDeserializer);
415432
client.AddHandler("text/json", () => customDeserializer);
416433
client.AddHandler("text/x-json", () => customDeserializer);
@@ -512,7 +529,7 @@ private ApiResponse<T> Exec<T>(RestRequest req, IReadableConfiguration configura
512529
}
513530
else
514531
{
515-
var customDeserializer = new CustomJsonCodec(configuration);
532+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
516533
client.AddHandler("application/json", () => customDeserializer);
517534
client.AddHandler("text/json", () => customDeserializer);
518535
client.AddHandler("text/x-json", () => customDeserializer);

samples/client/petstore/csharp-netcore/OpenAPIClientCore/src/Org.OpenAPITools/Client/ApiClient.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,23 @@ public partial class ApiClient : ISynchronousClient, IAsynchronousClient
165165
{
166166
private readonly String _baseUrl;
167167

168+
/// <summary>
169+
/// Specifies the settings on a <see cref="JsonSerializer" /> object.
170+
/// These settings can be adjusted to accomodate custom serialization rules.
171+
/// </summary>
172+
public JsonSerializerSettings SerializerSettings { get; set; } = new JsonSerializerSettings
173+
{
174+
// OpenAPI generated types generally hide default constructors.
175+
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
176+
ContractResolver = new DefaultContractResolver
177+
{
178+
NamingStrategy = new CamelCaseNamingStrategy
179+
{
180+
OverrideSpecifiedNames = false
181+
}
182+
}
183+
};
184+
168185
/// <summary>
169186
/// Allows for extending request processing for <see cref="ApiClient"/> generated code.
170187
/// </summary>
@@ -263,7 +280,7 @@ private RestRequest NewRequest(
263280
RestRequest request = new RestRequest(Method(method))
264281
{
265282
Resource = path,
266-
JsonSerializer = new CustomJsonCodec(configuration)
283+
JsonSerializer = new CustomJsonCodec(SerializerSettings, configuration)
267284
};
268285

269286
if (options.PathParameters != null)
@@ -411,7 +428,7 @@ private ApiResponse<T> Exec<T>(RestRequest req, IReadableConfiguration configura
411428
}
412429
else
413430
{
414-
var customDeserializer = new CustomJsonCodec(configuration);
431+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
415432
client.AddHandler("application/json", () => customDeserializer);
416433
client.AddHandler("text/json", () => customDeserializer);
417434
client.AddHandler("text/x-json", () => customDeserializer);
@@ -513,7 +530,7 @@ private ApiResponse<T> Exec<T>(RestRequest req, IReadableConfiguration configura
513530
}
514531
else
515532
{
516-
var customDeserializer = new CustomJsonCodec(configuration);
533+
var customDeserializer = new CustomJsonCodec(SerializerSettings, configuration);
517534
client.AddHandler("application/json", () => customDeserializer);
518535
client.AddHandler("text/json", () => customDeserializer);
519536
client.AddHandler("text/x-json", () => customDeserializer);

samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace Org.OpenAPITools.Client
2929
/// </summary>
3030
public partial class ApiClient
3131
{
32-
private JsonSerializerSettings serializerSettings = new JsonSerializerSettings
32+
public JsonSerializerSettings serializerSettings = new JsonSerializerSettings
3333
{
3434
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
3535
};

samples/client/petstore/csharp/OpenAPIClientNetStandard/src/Org.OpenAPITools/Client/ApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace Org.OpenAPITools.Client
2929
/// </summary>
3030
public partial class ApiClient
3131
{
32-
private JsonSerializerSettings serializerSettings = new JsonSerializerSettings
32+
public JsonSerializerSettings serializerSettings = new JsonSerializerSettings
3333
{
3434
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
3535
};

0 commit comments

Comments
 (0)