aboutsummaryrefslogtreecommitdiff
path: root/src/Jellyfin.Extensions/Json/JsonDefaults.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Jellyfin.Extensions/Json/JsonDefaults.cs')
-rw-r--r--src/Jellyfin.Extensions/Json/JsonDefaults.cs90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/Jellyfin.Extensions/Json/JsonDefaults.cs b/src/Jellyfin.Extensions/Json/JsonDefaults.cs
new file mode 100644
index 000000000..f4ec91123
--- /dev/null
+++ b/src/Jellyfin.Extensions/Json/JsonDefaults.cs
@@ -0,0 +1,90 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Jellyfin.Extensions.Json.Converters;
+
+namespace Jellyfin.Extensions.Json
+{
+ /// <summary>
+ /// Helper class for having compatible JSON throughout the codebase.
+ /// </summary>
+ public static class JsonDefaults
+ {
+ /// <summary>
+ /// Pascal case json profile media type.
+ /// </summary>
+ public const string PascalCaseMediaType = "application/json; profile=\"PascalCase\"";
+
+ /// <summary>
+ /// Camel case json profile media type.
+ /// </summary>
+ 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 JsonNullableGuidConverter(),
+ new JsonVersionConverter(),
+ new JsonStringEnumConverter(),
+ new JsonNullableStructConverterFactory(),
+ new JsonBoolNumberConverter(),
+ new JsonDateTimeConverter(),
+ new JsonStringConverter()
+ }
+ };
+
+ 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>
+ /// 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 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 CamelCaseOptions
+ => _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 PascalCaseOptions
+ => _pascalCaseJsonSerializerOptions;
+ }
+}