aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond-009 <bond.009@outlook.com>2020-12-23 18:09:39 +0100
committerGitHub <noreply@github.com>2020-12-23 18:09:39 +0100
commitf42208673facf26e475c9fad7a1e78b59358f3fa (patch)
treecc181e831cc661b09cb7a95e0e1dbfde6b881c00
parent3a452463fc23a5b22fc6503ccf1f1db2e3b7f52f (diff)
parentaf8acf7128c66b369cd8cad0aaebc4c3dd963c41 (diff)
Merge pull request #4855 from crobibero/cache-json-serializer
Initialize JsonSerializerOptions statically
-rw-r--r--MediaBrowser.Common/Json/JsonDefaults.cs78
1 files changed, 46 insertions, 32 deletions
diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs
index 128cc9d5d..1ec2a87c5 100644
--- a/MediaBrowser.Common/Json/JsonDefaults.cs
+++ b/MediaBrowser.Common/Json/JsonDefaults.cs
@@ -20,55 +20,69 @@ namespace MediaBrowser.Common.Json
public const string CamelCaseMediaType = "application/json; profile=\"CamelCase\"";
/// <summary>
+ /// When changing these options, update
+ /// Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs
+ /// -> AddJellyfinApi
+ /// -> AddJsonOptions.
+ /// </summary>
+ private static readonly JsonSerializerOptions _jsonSerializerOptions = new ()
+ {
+ ReadCommentHandling = JsonCommentHandling.Disallow,
+ WriteIndented = false,
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
+ NumberHandling = JsonNumberHandling.AllowReadingFromString,
+ Converters =
+ {
+ new JsonGuidConverter(),
+ new JsonVersionConverter(),
+ new JsonStringEnumConverter(),
+ new JsonNullableStructConverterFactory(),
+ new JsonBoolNumberConverter(),
+ new JsonDateTimeConverter()
+ }
+ };
+
+ private static readonly JsonSerializerOptions _pascalCaseJsonSerializerOptions = new (_jsonSerializerOptions)
+ {
+ PropertyNamingPolicy = null
+ };
+
+ private static readonly JsonSerializerOptions _camelCaseJsonSerializerOptions = new (_jsonSerializerOptions)
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase
+ };
+
+ /// <summary>
/// Gets the default <see cref="JsonSerializerOptions" /> options.
/// </summary>
/// <remarks>
- /// When changing these options, update
- /// Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs
- /// -> AddJellyfinApi
- /// -> AddJsonOptions.
+ /// The return value must not be modified.
+ /// If the defaults must be modified the author must use the copy constructor.
/// </remarks>
/// <returns>The default <see cref="JsonSerializerOptions" /> options.</returns>
public static JsonSerializerOptions GetOptions()
- {
- var options = new JsonSerializerOptions
- {
- ReadCommentHandling = JsonCommentHandling.Disallow,
- WriteIndented = false,
- DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
- NumberHandling = JsonNumberHandling.AllowReadingFromString
- };
-
- options.Converters.Add(new JsonGuidConverter());
- options.Converters.Add(new JsonVersionConverter());
- options.Converters.Add(new JsonStringEnumConverter());
- options.Converters.Add(new JsonNullableStructConverterFactory());
- options.Converters.Add(new JsonBoolNumberConverter());
- options.Converters.Add(new JsonDateTimeConverter());
-
- return options;
- }
+ => _jsonSerializerOptions;
/// <summary>
/// Gets camelCase json options.
/// </summary>
+ /// <remarks>
+ /// The return value must not be modified.
+ /// If the defaults must be modified the author must use the copy constructor.
+ /// </remarks>
/// <returns>The camelCase <see cref="JsonSerializerOptions" /> options.</returns>
public static JsonSerializerOptions GetCamelCaseOptions()
- {
- var options = GetOptions();
- options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
- return options;
- }
+ => _camelCaseJsonSerializerOptions;
/// <summary>
/// Gets PascalCase json options.
/// </summary>
+ /// <remarks>
+ /// The return value must not be modified.
+ /// If the defaults must be modified the author must use the copy constructor.
+ /// </remarks>
/// <returns>The PascalCase <see cref="JsonSerializerOptions" /> options.</returns>
public static JsonSerializerOptions GetPascalCaseOptions()
- {
- var options = GetOptions();
- options.PropertyNamingPolicy = null;
- return options;
- }
+ => _pascalCaseJsonSerializerOptions;
}
}