Skip to content

Commit 9949e13

Browse files
committed
WebApiContractResolver adapter
1 parent 3f5552c commit 9949e13

11 files changed

Lines changed: 42 additions & 10 deletions

File tree

src/Libraries/SmartStore.Core/ComponentModel/SmartContractResolver.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,7 @@ protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
1616

1717
return base.CreateMemberValueProvider(member);
1818
}
19+
20+
public static SmartContractResolver Instance { get; } = new SmartContractResolver();
1921
}
2022
}

src/Libraries/SmartStore.Core/Utilities/CommonHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ public static long GetObjectSizeInBytes(object obj, HashSet<object> instanceLook
438438
// Serialization failed or is not supported: make JSON.
439439
var json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
440440
{
441-
ContractResolver = new SmartContractResolver(),
441+
ContractResolver = SmartContractResolver.Instance,
442442
DateFormatHandling = DateFormatHandling.IsoDateFormat,
443443
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
444444
MaxDepth = 10,

src/Libraries/SmartStore.Services/Cms/Blocks/BlockHandlerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public virtual void Save(T block, IBlockEntity entity)
6868

6969
var settings = new JsonSerializerSettings
7070
{
71-
ContractResolver = new SmartContractResolver(),
71+
ContractResolver = SmartContractResolver.Instance,
7272
TypeNameHandling = TypeNameHandling.Objects,
7373
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
7474
ObjectCreationHandling = ObjectCreationHandling.Replace,

src/Presentation/SmartStore.Web.Framework/Localization/SetWorkingCultureAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private string CreateCultureJson(CultureInfo ci)
161161

162162
var json = JsonConvert.SerializeObject(dict, new JsonSerializerSettings
163163
{
164-
ContractResolver = new SmartContractResolver(),
164+
ContractResolver = SmartContractResolver.Instance,
165165
Formatting = Formatting.None
166166
});
167167

src/Presentation/SmartStore.Web.Framework/Modelling/Results/JsonNetResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static JsonSerializerSettings CreateDefaultSerializerSettings()
3030
{
3131
var settings = new JsonSerializerSettings
3232
{
33-
ContractResolver = new SmartContractResolver(),
33+
ContractResolver = SmartContractResolver.Instance,
3434
MissingMemberHandling = MissingMemberHandling.Ignore,
3535
TypeNameHandling = TypeNameHandling.Objects,
3636
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,

src/Presentation/SmartStore.Web.Framework/SmartStore.Web.Framework.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@
465465
<Compile Include="WebApi\Security\WebApiAuthenticateAttribute.cs" />
466466
<Compile Include="WebApi\Caching\WebApiCachingControllingData.cs" />
467467
<Compile Include="WebApi\Caching\WebApiCachingUserData.cs" />
468+
<Compile Include="WebApi\WebApiContractResolver.cs" />
468469
<Compile Include="WebApi\WebApiCore.cs" />
469470
<Compile Include="WebApi\WebApiEntityController.cs" />
470471
<Compile Include="WebApi\WebApiExtension.cs" />

src/Presentation/SmartStore.Web.Framework/Templating/Liquid/Filters/AdditionalFilters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static string Json(object input)
3535

3636
return JsonConvert.SerializeObject(input, new JsonSerializerSettings
3737
{
38-
ContractResolver = new SmartContractResolver(),
38+
ContractResolver = SmartContractResolver.Instance,
3939
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
4040
});
4141
}

src/Presentation/SmartStore.Web.Framework/UI/Icons/IconExplorer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private Dictionary<string, IconDescription> LoadIconsMetadata()
114114
// minified file did not exist: save it.
115115
var settings = new JsonSerializerSettings
116116
{
117-
ContractResolver = new SmartContractResolver(),
117+
ContractResolver = SmartContractResolver.Instance,
118118
DefaultValueHandling = DefaultValueHandling.Ignore,
119119
Formatting = Formatting.None
120120
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using System.Net.Http.Formatting;
3+
using System.Reflection;
4+
using Newtonsoft.Json.Serialization;
5+
using SmartStore.ComponentModel;
6+
7+
namespace SmartStore.Web.Framework.WebApi
8+
{
9+
internal partial class WebApiContractResolver : JsonContractResolver
10+
{
11+
public WebApiContractResolver(MediaTypeFormatter formatter)
12+
: base(formatter)
13+
{
14+
}
15+
16+
protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
17+
{
18+
if (member is PropertyInfo pi)
19+
{
20+
return new FastPropertyValueProvider(pi);
21+
}
22+
23+
return base.CreateMemberValueProvider(member);
24+
}
25+
}
26+
}

src/Presentation/SmartStore.Web.Framework/WebApi/WebApiStartupTask.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using System.Web.Http.OData.Extensions;
77
using System.Web.Http.OData.Routing;
88
using System.Web.Http.OData.Routing.Conventions;
9+
using Newtonsoft.Json;
10+
using SmartStore.ComponentModel;
911
using SmartStore.Core.Infrastructure;
1012
using SmartStore.Web.Framework.WebApi.Configuration;
1113
using SmartStore.Web.Framework.WebApi.OData;
@@ -27,15 +29,16 @@ public void Execute()
2729

2830
config.DependencyResolver = new AutofacWebApiDependencyResolver();
2931

30-
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
31-
config.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("format", "json", "application/json"));
32+
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
33+
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new WebApiContractResolver(config.Formatters.JsonFormatter);
34+
config.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("format", "json", "application/json"));
3235
config.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("format", "xml", "application/xml"));
3336

3437
config.AddODataQueryFilter(new WebApiQueryableAttribute());
3538

3639
var corsAttribute = new EnableCorsAttribute("*", "*", "*", WebApiGlobal.Header.CorsExposed);
3740
config.EnableCors(corsAttribute);
38-
41+
3942
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
4043

4144
var configPublisher = (IWebApiConfigurationPublisher)config.DependencyResolver.GetService(typeof(IWebApiConfigurationPublisher));

0 commit comments

Comments
 (0)