diff --git a/NJsonApi.Common.Test/NJsonApi.Common.Test.csproj b/NJsonApi.Common.Test/NJsonApi.Common.Test.csproj index 4c82ba8..e67edb6 100644 --- a/NJsonApi.Common.Test/NJsonApi.Common.Test.csproj +++ b/NJsonApi.Common.Test/NJsonApi.Common.Test.csproj @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Properties NJsonApi.Common.Test NJsonApi.Common.Test - v4.5 + v4.8 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 diff --git a/NJsonApi.Common.Test/packages.config b/NJsonApi.Common.Test/packages.config index df12f33..0489dde 100644 --- a/NJsonApi.Common.Test/packages.config +++ b/NJsonApi.Common.Test/packages.config @@ -1,9 +1,9 @@ - + - + - - - + + + \ No newline at end of file diff --git a/NJsonApi.Test/NJsonApi.Test.csproj b/NJsonApi.Test/NJsonApi.Test.csproj index 484d144..ba6c1c6 100644 --- a/NJsonApi.Test/NJsonApi.Test.csproj +++ b/NJsonApi.Test/NJsonApi.Test.csproj @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Properties NJsonApi.Test NJsonApi.Test - v4.5 + v4.8 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 diff --git a/NJsonApi.Test/app.config b/NJsonApi.Test/app.config index 244cd95..e1a45ad 100644 --- a/NJsonApi.Test/app.config +++ b/NJsonApi.Test/app.config @@ -8,4 +8,4 @@ - + diff --git a/NJsonApi.Test/packages.config b/NJsonApi.Test/packages.config index 6a8f94d..044cdae 100644 --- a/NJsonApi.Test/packages.config +++ b/NJsonApi.Test/packages.config @@ -1,12 +1,12 @@ - + - + - - - + + + \ No newline at end of file diff --git a/Util-JsonApiSerializer.Common/Util-JsonApiSerializer.Common.csproj b/Util-JsonApiSerializer.Common/Util-JsonApiSerializer.Common.csproj index 01016d8..a2214a9 100644 --- a/Util-JsonApiSerializer.Common/Util-JsonApiSerializer.Common.csproj +++ b/Util-JsonApiSerializer.Common/Util-JsonApiSerializer.Common.csproj @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Properties UtilJsonApiSerializer.Common UtilJsonApiSerializer.Common - v4.5 + v4.8 512 ..\..\ diff --git a/Util-JsonApiSerializer.NetCore/IJsonApiSerializerSettings.cs b/Util-JsonApiSerializer.NetCore/IJsonApiSerializerSettings.cs new file mode 100644 index 0000000..a5440e7 --- /dev/null +++ b/Util-JsonApiSerializer.NetCore/IJsonApiSerializerSettings.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Util_JsonApiSerializer.NetCore +{ + public interface IJsonApiSerializerSettings + { + public string RoutePrefix { get; set; } + } +} diff --git a/Util-JsonApiSerializer.NetCore/JsonApiSerializer.cs b/Util-JsonApiSerializer.NetCore/JsonApiSerializer.cs new file mode 100644 index 0000000..4eb58de --- /dev/null +++ b/Util-JsonApiSerializer.NetCore/JsonApiSerializer.cs @@ -0,0 +1,74 @@ + + using Microsoft.AspNetCore.Http; + +using System.Collections.Generic; +using Util_JsonApiSerializer.NetCore; +using UtilJsonApiSerializer.Serialization; +using UtilJsonApiSerializer.Serialization.Documents; +namespace UtilJsonApiSerializer +{ + public class JsonApiSerializer : IJsonApiSerializer + { + private readonly string _routePrefix; + + public ConfigurationBuilder SerializerConfiguration { get; set; } +// In Net Core we do not have access to the Http Context directly, so we need to inject it via httpContextAccessor + + private IHttpContextAccessor _accessor; + private IJsonApiSerializerSettings _settings; + public JsonApiSerializer( + IHttpContextAccessor accessor, + IJsonApiSerializerSettings settings + ) + { + SerializerConfiguration = new ConfigurationBuilder(); + _routePrefix = settings == null ? "" : settings.RoutePrefix; + _accessor = accessor; + } + + public JsonApiSerializer(IHttpContextAccessor accessor, string routePrefix) + { + SerializerConfiguration = new ConfigurationBuilder(); + _routePrefix = string.IsNullOrEmpty(routePrefix) ? "" : routePrefix; + _accessor = accessor; + } + + + + + public object SerializeObject(ConfigurationBuilder serializerConfig, object obj) + { + var config = serializerConfig.Build(); + RunPreSerializationPipelineModules(config, obj); + + var sut = new JsonApiTransformer() { TransformationHelper = new TransformationHelper(_accessor) }; + + CompoundDocument result = sut.Transform(obj, new Context() { Configuration = config, RoutePrefix = _routePrefix }); + + return result; + } + + private void RunPreSerializationPipelineModules(Configuration config, object objectData) + { + var objectType = TransformationHelper.GetObjectType(objectData); + var preSerializerPipelineModule = config.GetPreSerializerPipelineModule(objectType); + if (preSerializerPipelineModule != null) + { + if (objectData is IEnumerable enumerableData) + { + foreach (var item in enumerableData) + { + preSerializerPipelineModule.Run(item); + } + } + else + { + preSerializerPipelineModule.Run(objectData); + } + + } + } + + + } +} diff --git a/Util-JsonApiSerializer.NetCore/JsonApiSerializerSettings.cs b/Util-JsonApiSerializer.NetCore/JsonApiSerializerSettings.cs new file mode 100644 index 0000000..b7abcc6 --- /dev/null +++ b/Util-JsonApiSerializer.NetCore/JsonApiSerializerSettings.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Util_JsonApiSerializer.NetCore +{ + public class JsonApiSerializerSettings : IJsonApiSerializerSettings + { + public string RoutePrefix { get; set; } = "api"; + } +} diff --git a/Util-JsonApiSerializer.NetCore/Util-JsonApiSerializer.NetCore.csproj b/Util-JsonApiSerializer.NetCore/Util-JsonApiSerializer.NetCore.csproj index 096e286..c6c0ff1 100644 --- a/Util-JsonApiSerializer.NetCore/Util-JsonApiSerializer.NetCore.csproj +++ b/Util-JsonApiSerializer.NetCore/Util-JsonApiSerializer.NetCore.csproj @@ -42,7 +42,6 @@ - diff --git a/Util-JsonApiSerializer/Util-JsonApiSerializer.csproj b/Util-JsonApiSerializer/Util-JsonApiSerializer.csproj index 23d5c7a..ed4a874 100644 --- a/Util-JsonApiSerializer/Util-JsonApiSerializer.csproj +++ b/Util-JsonApiSerializer/Util-JsonApiSerializer.csproj @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Properties UtilJsonApiSerializer UtilJsonApiSerializer - v4.5 + v4.8 512 ..\..\ diff --git a/Util-JsonApiSerializer/app.config b/Util-JsonApiSerializer/app.config index 244cd95..e1a45ad 100644 --- a/Util-JsonApiSerializer/app.config +++ b/Util-JsonApiSerializer/app.config @@ -8,4 +8,4 @@ - +