From 9969f662019b2148ccade7418bbb00ee056b5f0f Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Fri, 25 Jan 2013 11:03:28 -0800 Subject: [PATCH] json response from API are now in pascalCasing --- NzbDrone.Api/Bootstrapper.cs | 2 ++ NzbDrone.Api/ErrorManagment/ApiException.cs | 1 + NzbDrone.Api/ErrorManagment/ErrorHandler.cs | 1 + .../Extentions/NancyJsonSerializer.cs | 27 +++++++++++++++ .../RequestExtensions.cs | 14 +++----- NzbDrone.Api/Extentions/Serializer.cs | 33 +++++++++++++++++++ NzbDrone.Api/NzbDrone.Api.csproj | 4 ++- .../QualityProfiles/QualityProfilesModule.cs | 1 + .../QualityProfiles/RootFolderModule.cs | 1 + NzbDrone.Api/QualityType/QualityTypeModule.cs | 1 + NzbDrone.Api/Series/SeriesModule.cs | 1 + 11 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 NzbDrone.Api/Extentions/NancyJsonSerializer.cs rename NzbDrone.Api/{QualityType => Extentions}/RequestExtensions.cs (51%) create mode 100644 NzbDrone.Api/Extentions/Serializer.cs diff --git a/NzbDrone.Api/Bootstrapper.cs b/NzbDrone.Api/Bootstrapper.cs index 6b0b9dcc6..003ebe7c1 100644 --- a/NzbDrone.Api/Bootstrapper.cs +++ b/NzbDrone.Api/Bootstrapper.cs @@ -5,6 +5,7 @@ using NLog; using Nancy.Bootstrapper; using Nancy.Bootstrappers.Autofac; using NzbDrone.Api.ErrorManagment; +using NzbDrone.Api.Extentions; using NzbDrone.Api.QualityProfiles; using NzbDrone.Api.QualityType; using NzbDrone.Api.Resolvers; @@ -83,6 +84,7 @@ namespace NzbDrone.Api var internalConfig = NancyInternalConfiguration.Default; internalConfig.StatusCodeHandlers.Add(typeof(ErrorHandler)); + internalConfig.Serializers.Add(typeof(NancyJsonSerializer)); return internalConfig; diff --git a/NzbDrone.Api/ErrorManagment/ApiException.cs b/NzbDrone.Api/ErrorManagment/ApiException.cs index f9d1e1265..547d02255 100644 --- a/NzbDrone.Api/ErrorManagment/ApiException.cs +++ b/NzbDrone.Api/ErrorManagment/ApiException.cs @@ -3,6 +3,7 @@ using System.Linq; using Nancy; using Nancy.Responses; using Newtonsoft.Json; +using NzbDrone.Api.Extentions; using NzbDrone.Api.QualityType; namespace NzbDrone.Api.ErrorManagment diff --git a/NzbDrone.Api/ErrorManagment/ErrorHandler.cs b/NzbDrone.Api/ErrorManagment/ErrorHandler.cs index 9dd643e46..5f455f4a4 100644 --- a/NzbDrone.Api/ErrorManagment/ErrorHandler.cs +++ b/NzbDrone.Api/ErrorManagment/ErrorHandler.cs @@ -1,6 +1,7 @@ using System.Linq; using Nancy; using Nancy.ErrorHandling; +using NzbDrone.Api.Extentions; using NzbDrone.Api.QualityType; namespace NzbDrone.Api.ErrorManagment diff --git a/NzbDrone.Api/Extentions/NancyJsonSerializer.cs b/NzbDrone.Api/Extentions/NancyJsonSerializer.cs new file mode 100644 index 000000000..2ed65784e --- /dev/null +++ b/NzbDrone.Api/Extentions/NancyJsonSerializer.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Nancy; +using Newtonsoft.Json; + +namespace NzbDrone.Api.Extentions +{ + public class NancyJsonSerializer : ISerializer + { + public readonly static NancyJsonSerializer Instance = new NancyJsonSerializer(); + + public bool CanSerialize(string contentType) + { + return true; + } + + public void Serialize(string contentType, TModel model, Stream outputStream) + { + var jsonTextWriter = new JsonTextWriter(new StreamWriter(outputStream)); + Serializer.Instance.Serialize(jsonTextWriter, model); + jsonTextWriter.Flush(); + } + + public IEnumerable Extensions { get; private set; } + } +} \ No newline at end of file diff --git a/NzbDrone.Api/QualityType/RequestExtensions.cs b/NzbDrone.Api/Extentions/RequestExtensions.cs similarity index 51% rename from NzbDrone.Api/QualityType/RequestExtensions.cs rename to NzbDrone.Api/Extentions/RequestExtensions.cs index f14c3f7d8..0cab1e012 100644 --- a/NzbDrone.Api/QualityType/RequestExtensions.cs +++ b/NzbDrone.Api/Extentions/RequestExtensions.cs @@ -1,11 +1,10 @@ -using System; -using System.IO; +using System.IO; using System.Linq; using Nancy; using Nancy.Responses; using Newtonsoft.Json; -namespace NzbDrone.Api.QualityType +namespace NzbDrone.Api.Extentions { public static class JsonExtensions { @@ -14,17 +13,12 @@ namespace NzbDrone.Api.QualityType var reader = new StreamReader(body, true); body.Position = 0; var value = reader.ReadToEnd(); - return JsonConvert.DeserializeObject(value, new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - MissingMemberHandling = MissingMemberHandling.Ignore - }); + return JsonConvert.DeserializeObject(value, Serializer.Settings); } public static JsonResponse AsResponse(this TModel model, HttpStatusCode statusCode = HttpStatusCode.OK) { - ISerializer serializer = new DefaultJsonSerializer(); - var jsonResponse = new JsonResponse(model, serializer) { StatusCode = statusCode }; + var jsonResponse = new JsonResponse(model, new NancyJsonSerializer()) { StatusCode = statusCode }; return jsonResponse; } } diff --git a/NzbDrone.Api/Extentions/Serializer.cs b/NzbDrone.Api/Extentions/Serializer.cs new file mode 100644 index 000000000..f3d438727 --- /dev/null +++ b/NzbDrone.Api/Extentions/Serializer.cs @@ -0,0 +1,33 @@ +using System.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace NzbDrone.Api.Extentions +{ + public static class Serializer + { + static Serializer() + { + Settings = new JsonSerializerSettings + { + DateTimeZoneHandling = DateTimeZoneHandling.Utc, + NullValueHandling = NullValueHandling.Ignore, + Formatting = Formatting.None, + DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate + }; + + Instance = new JsonSerializer + { + DateTimeZoneHandling = Settings.DateTimeZoneHandling, + NullValueHandling = NullValueHandling.Ignore, + Formatting = Formatting.None, + DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate, + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; + } + + public static JsonSerializerSettings Settings { get; private set; } + + public static JsonSerializer Instance { get; private set; } + } +} \ No newline at end of file diff --git a/NzbDrone.Api/NzbDrone.Api.csproj b/NzbDrone.Api/NzbDrone.Api.csproj index 277548367..564817013 100644 --- a/NzbDrone.Api/NzbDrone.Api.csproj +++ b/NzbDrone.Api/NzbDrone.Api.csproj @@ -89,6 +89,8 @@ + + @@ -103,7 +105,7 @@ - + diff --git a/NzbDrone.Api/QualityProfiles/QualityProfilesModule.cs b/NzbDrone.Api/QualityProfiles/QualityProfilesModule.cs index 02d790e93..640f145dc 100644 --- a/NzbDrone.Api/QualityProfiles/QualityProfilesModule.cs +++ b/NzbDrone.Api/QualityProfiles/QualityProfilesModule.cs @@ -2,6 +2,7 @@ using System.Linq; using AutoMapper; using Nancy; +using NzbDrone.Api.Extentions; using NzbDrone.Core.Providers; using NzbDrone.Core.Repository.Quality; using NzbDrone.Api.QualityType; diff --git a/NzbDrone.Api/QualityProfiles/RootFolderModule.cs b/NzbDrone.Api/QualityProfiles/RootFolderModule.cs index b9adf60c2..5fd17a02b 100644 --- a/NzbDrone.Api/QualityProfiles/RootFolderModule.cs +++ b/NzbDrone.Api/QualityProfiles/RootFolderModule.cs @@ -1,4 +1,5 @@ using Nancy; +using NzbDrone.Api.Extentions; using NzbDrone.Core.Providers; using NzbDrone.Api.QualityType; using NzbDrone.Core.Repository; diff --git a/NzbDrone.Api/QualityType/QualityTypeModule.cs b/NzbDrone.Api/QualityType/QualityTypeModule.cs index b038aa018..88ef10e23 100644 --- a/NzbDrone.Api/QualityType/QualityTypeModule.cs +++ b/NzbDrone.Api/QualityType/QualityTypeModule.cs @@ -2,6 +2,7 @@ using System.Linq; using AutoMapper; using Nancy; +using NzbDrone.Api.Extentions; using NzbDrone.Api.QualityProfiles; using NzbDrone.Core.Providers; diff --git a/NzbDrone.Api/Series/SeriesModule.cs b/NzbDrone.Api/Series/SeriesModule.cs index d881a8069..86df821f5 100644 --- a/NzbDrone.Api/Series/SeriesModule.cs +++ b/NzbDrone.Api/Series/SeriesModule.cs @@ -1,5 +1,6 @@ using System.Linq; using Nancy; +using NzbDrone.Api.Extentions; using NzbDrone.Api.QualityType; using NzbDrone.Core.Providers;