diff --git a/sample/ODataNewtonsoftJsonSample/Startup.cs b/sample/ODataNewtonsoftJsonSample/Startup.cs index 3fa31f287..df41859f6 100644 --- a/sample/ODataNewtonsoftJsonSample/Startup.cs +++ b/sample/ODataNewtonsoftJsonSample/Startup.cs @@ -25,19 +25,17 @@ public Startup(IConfiguration configuration) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddControllers(); - - services.AddOData(opt => opt.Select().Filter().AddModel("odata", GetEdmModel())).AddNewtonsoftJson( - options => - { - options.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore; - options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - //options.SerializerSettings.ContractResolver = WebApiJsonResolver.Instance; - }); - - // You can also add the converter one by one using followings: - //services.AddControllers().AddNewtonsoftJson( - // opt => opt.SerializerSettings.Converters.Add(new JDynamicTypeWrapperConverter())); + services.AddControllers() + .AddOData(opt => opt.Select().Filter().AddModel("odata", GetEdmModel())) + .AddODataNewtonsoftJson() + //.AddNewtonsoftJson( + //options => + //{ + // options.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore; + // options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; + // //options.SerializerSettings.ContractResolver = WebApiJsonResolver.Instance; + //}) + ; } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JDynamicTypeWrapperConverter.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JDynamicTypeWrapperConverter.cs index 64e63660b..675b01d80 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JDynamicTypeWrapperConverter.cs +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JDynamicTypeWrapperConverter.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.OData.NewtonsoftJson /// /// Represents a custom to serialize instances to JSON. /// - public class JDynamicTypeWrapperConverter : JsonConverter + internal class JDynamicTypeWrapperConverter : JsonConverter { /// /// Determines whether this instance can convert the specified type. diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JPageResultValueConverter.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JPageResultValueConverter.cs index 760df162f..09117b80c 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JPageResultValueConverter.cs +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JPageResultValueConverter.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.OData.NewtonsoftJson /// /// Represents a custom to serialize instances to JSON. /// - public class JPageResultValueConverter : JsonConverter + internal class JPageResultValueConverter : JsonConverter { /// /// Determines whether this instance can convert the specified type. diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSelectExpandWrapperConverter.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSelectExpandWrapperConverter.cs index 186780ae0..abfb86cd4 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSelectExpandWrapperConverter.cs +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSelectExpandWrapperConverter.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.OData.NewtonsoftJson /// /// Represents a custom to serialize instances to JSON. /// - public class JSelectExpandWrapperConverter : JsonConverter + internal class JSelectExpandWrapperConverter : JsonConverter { private Func _mapperProvider; diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSingleResultValueConverter.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSingleResultValueConverter.cs index af9101a00..ab26e6534 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSingleResultValueConverter.cs +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JSingleResultValueConverter.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.OData.NewtonsoftJson /// /// Represents a custom to serialize instances to JSON. /// - public class JSingleResultValueConverter : JsonConverter + internal class JSingleResultValueConverter : JsonConverter { /// /// Determines whether this instance can convert the specified type. diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JsonPropertyNameMapper.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JsonPropertyNameMapper.cs index 03003b884..c29042533 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JsonPropertyNameMapper.cs +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/JsonPropertyNameMapper.cs @@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.OData.NewtonsoftJson /// /// Edm Property name mapper. /// - public class JsonPropertyNameMapper : IPropertyMapper + internal class JsonPropertyNameMapper : IPropertyMapper { private IEdmModel _model; private IEdmStructuredType _type; diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/Microsoft.AspNetCore.OData.NewtonsoftJson.xml b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/Microsoft.AspNetCore.OData.NewtonsoftJson.xml index 9bacfa307..badfc7eb3 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/Microsoft.AspNetCore.OData.NewtonsoftJson.xml +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/Microsoft.AspNetCore.OData.NewtonsoftJson.xml @@ -154,34 +154,40 @@ The given property name. The mapped property name. - + - Extension methods for adding OData Json converter to Newtonsoft.Json to . + Extension methods for adding OData Json converter to Newtonsoft.Json to and . - + Configures Newtonsoft.Json using OData Json converter. - The OData builder. - The . + The Mvc builder. + The . - + Configures Newtonsoft.Json using OData Json converter. - The OData builder. - Callback to configure . - The . + The Mvc builder. + The mapper provider. + The . + + + + Configures Newtonsoft.Json using OData Json converter. + + The Mvc core builder. + The . - + Configures Newtonsoft.Json using OData Json converter. - The OData builder. - Callback to configure . - The property mapper provider. - The . + The Mvc core builder. + The mapper provider. + The . diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftJsonMvcBuilderExtensions.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftJsonMvcBuilderExtensions.cs new file mode 100644 index 000000000..90b7e6fb4 --- /dev/null +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftJsonMvcBuilderExtensions.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +using System; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.OData.Query.Container; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OData.Edm; + +namespace Microsoft.AspNetCore.OData.NewtonsoftJson +{ + /// + /// Extension methods for adding OData Json converter to Newtonsoft.Json to and . + /// + public static class ODataNewtonsoftJsonMvcBuilderExtensions + { + #region IMvcBuilder + /// + /// Configures Newtonsoft.Json using OData Json converter. + /// + /// The Mvc builder. + /// The . + public static IMvcBuilder AddODataNewtonsoftJson(this IMvcBuilder builder) + { + return builder.AddODataNewtonsoftJson(null); + } + + /// + /// Configures Newtonsoft.Json using OData Json converter. + /// + /// The Mvc builder. + /// The mapper provider. + /// The . + public static IMvcBuilder AddODataNewtonsoftJson(this IMvcBuilder builder, + Func mapperProvider) + { + if (builder is null) + { + throw new ArgumentNullException(nameof(builder)); + } + + return builder.AddNewtonsoftJson(BuildSetupAction(mapperProvider)); + } + #endregion + + #region IMvcCoreBuilder + /// + /// Configures Newtonsoft.Json using OData Json converter. + /// + /// The Mvc core builder. + /// The . + public static IMvcCoreBuilder AddODataNewtonsoftJson(this IMvcCoreBuilder builder) + { + return builder.AddNewtonsoftJson(null); + } + + /// + /// Configures Newtonsoft.Json using OData Json converter. + /// + /// The Mvc core builder. + /// The mapper provider. + /// The . + public static IMvcCoreBuilder AddODataNewtonsoftJson(this IMvcCoreBuilder builder, + Func mapperProvider) + { + if (builder is null) + { + throw new ArgumentNullException(nameof(builder)); + } + + return builder.AddNewtonsoftJson(BuildSetupAction(mapperProvider)); + } + #endregion + + private static Action BuildSetupAction(Func mapperProvider) + { + Action odataSetupAction = opt => + { + if (mapperProvider is null) + { + opt.SerializerSettings.Converters.Add(new JSelectExpandWrapperConverter()); + } + else + { + opt.SerializerSettings.Converters.Add(new JSelectExpandWrapperConverter(mapperProvider)); + } + + opt.SerializerSettings.Converters.Add(new JDynamicTypeWrapperConverter()); + opt.SerializerSettings.Converters.Add(new JPageResultValueConverter()); + opt.SerializerSettings.Converters.Add(new JSingleResultValueConverter()); + }; + + return odataSetupAction; + } + } +} diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftServiceCollectionExtensions.cs b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftServiceCollectionExtensions.cs deleted file mode 100644 index a8b67ce2c..000000000 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/ODataNewtonsoftServiceCollectionExtensions.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -using System; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.OData.Abstracts; -using Microsoft.AspNetCore.OData.Query.Container; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.OData.Edm; - -namespace Microsoft.AspNetCore.OData.NewtonsoftJson -{ - /// - /// Extension methods for adding OData Json converter to Newtonsoft.Json to . - /// - public static class ODataNewtonsoftServiceCollectionExtensions - { - /// - /// Configures Newtonsoft.Json using OData Json converter. - /// - /// The OData builder. - /// The . - public static IODataBuilder AddNewtonsoftJson(this IODataBuilder builder) - { - return builder.AddNewtonsoftJson(opt => { }); - } - - /// - /// Configures Newtonsoft.Json using OData Json converter. - /// - /// The OData builder. - /// Callback to configure . - /// The . - public static IODataBuilder AddNewtonsoftJson(this IODataBuilder builder, Action setupAction) - { - return builder.AddNewtonsoftJson(setupAction, null); - } - - /// - /// Configures Newtonsoft.Json using OData Json converter. - /// - /// The OData builder. - /// Callback to configure . - /// The property mapper provider. - /// The . - public static IODataBuilder AddNewtonsoftJson(this IODataBuilder builder, Action setupAction, - Func mapperProvider) - { - if (builder is null) - { - throw new ArgumentNullException(nameof(builder)); - } - - if (setupAction is null) - { - throw new ArgumentNullException(nameof(setupAction)); - } - - Action odataSetupAction = opt => - { - setupAction(opt); - - if (mapperProvider is null) - { - opt.SerializerSettings.Converters.Add(new JSelectExpandWrapperConverter()); - } - else - { - opt.SerializerSettings.Converters.Add(new JSelectExpandWrapperConverter(mapperProvider)); - } - - opt.SerializerSettings.Converters.Add(new JDynamicTypeWrapperConverter()); - opt.SerializerSettings.Converters.Add(new JPageResultValueConverter()); - opt.SerializerSettings.Converters.Add(new JSingleResultValueConverter()); - }; - - builder.Services.AddControllers().AddNewtonsoftJson(odataSetupAction); - return builder; - } - } -} diff --git a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/PublicAPI.Unshipped.txt b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/PublicAPI.Unshipped.txt index 2427e7c0a..8a2ffffcc 100644 --- a/src/Microsoft.AspNetCore.OData.NewtonsoftJson/PublicAPI.Unshipped.txt +++ b/src/Microsoft.AspNetCore.OData.NewtonsoftJson/PublicAPI.Unshipped.txt @@ -1,28 +1,5 @@ -Microsoft.AspNetCore.OData.NewtonsoftJson.JDynamicTypeWrapperConverter -Microsoft.AspNetCore.OData.NewtonsoftJson.JDynamicTypeWrapperConverter.JDynamicTypeWrapperConverter() -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JPageResultValueConverter -Microsoft.AspNetCore.OData.NewtonsoftJson.JPageResultValueConverter.JPageResultValueConverter() -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter -Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter.JSelectExpandWrapperConverter() -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter.JSelectExpandWrapperConverter(System.Func mapperProvider) -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JSingleResultValueConverter -Microsoft.AspNetCore.OData.NewtonsoftJson.JSingleResultValueConverter.JSingleResultValueConverter() -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JsonPropertyNameMapper -Microsoft.AspNetCore.OData.NewtonsoftJson.JsonPropertyNameMapper.JsonPropertyNameMapper(Microsoft.OData.Edm.IEdmModel model, Microsoft.OData.Edm.IEdmStructuredType type) -> void -Microsoft.AspNetCore.OData.NewtonsoftJson.JsonPropertyNameMapper.MapProperty(string propertyName) -> string -Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftServiceCollectionExtensions -override Microsoft.AspNetCore.OData.NewtonsoftJson.JDynamicTypeWrapperConverter.CanConvert(System.Type objectType) -> bool -override Microsoft.AspNetCore.OData.NewtonsoftJson.JDynamicTypeWrapperConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object -override Microsoft.AspNetCore.OData.NewtonsoftJson.JDynamicTypeWrapperConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void -override Microsoft.AspNetCore.OData.NewtonsoftJson.JPageResultValueConverter.CanConvert(System.Type objectType) -> bool -override Microsoft.AspNetCore.OData.NewtonsoftJson.JPageResultValueConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object -override Microsoft.AspNetCore.OData.NewtonsoftJson.JPageResultValueConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter.CanConvert(System.Type objectType) -> bool -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSelectExpandWrapperConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSingleResultValueConverter.CanConvert(System.Type objectType) -> bool -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSingleResultValueConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object -override Microsoft.AspNetCore.OData.NewtonsoftJson.JSingleResultValueConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void -static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftServiceCollectionExtensions.AddNewtonsoftJson(this Microsoft.AspNetCore.OData.Abstracts.IODataBuilder builder) -> Microsoft.AspNetCore.OData.Abstracts.IODataBuilder -static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftServiceCollectionExtensions.AddNewtonsoftJson(this Microsoft.AspNetCore.OData.Abstracts.IODataBuilder builder, System.Action setupAction) -> Microsoft.AspNetCore.OData.Abstracts.IODataBuilder -static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftServiceCollectionExtensions.AddNewtonsoftJson(this Microsoft.AspNetCore.OData.Abstracts.IODataBuilder builder, System.Action setupAction, System.Func mapperProvider) -> Microsoft.AspNetCore.OData.Abstracts.IODataBuilder \ No newline at end of file +Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftJsonMvcBuilderExtensions +static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftJsonMvcBuilderExtensions.AddODataNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftJsonMvcBuilderExtensions.AddODataNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Func mapperProvider) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftJsonMvcBuilderExtensions.AddODataNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +static Microsoft.AspNetCore.OData.NewtonsoftJson.ODataNewtonsoftJsonMvcBuilderExtensions.AddODataNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Func mapperProvider) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder \ No newline at end of file