Skip to content

Commit c2f7cf6

Browse files
committed
Add possibility to set own JsonSerializerSettings in confiquration
This affects how components are rendered server-side.
1 parent b710d1a commit c2f7cf6

File tree

5 files changed

+57
-3
lines changed

5 files changed

+57
-3
lines changed

src/React/IReactEnvironment.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,10 @@ public interface IReactEnvironment
107107
/// Gets the JSX Transformer for this environment.
108108
/// </summary>
109109
IJsxTransformer JsxTransformer { get; }
110+
111+
/// <summary>
112+
/// Gets the global site configuration.
113+
/// </summary>
114+
IReactSiteConfiguration Configuration { get; }
110115
}
111116
}

src/React/IReactSiteConfiguration.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10+
using Newtonsoft.Json;
1011
using System.Collections.Generic;
1112

1213
namespace React
@@ -42,5 +43,20 @@ public interface IReactSiteConfiguration
4243
/// Specifies whether ES6 (harmony) syntax should be transformed
4344
/// </summary>
4445
IReactSiteConfiguration SetUseHarmony(bool useHarmony);
46+
47+
/// <summary>
48+
/// Gets the configuration for json serializer.
49+
/// </summary>
50+
JsonSerializerSettings JsonSerializerSettings { get; }
51+
52+
/// <summary>
53+
/// Sets the configuration for json serializer.
54+
/// </summary>
55+
/// <remarks>
56+
/// Thic confiquration is used when component initialization script
57+
/// is being generated server-side.
58+
/// </remarks>
59+
/// <param name="settings">The settings.</param>
60+
IReactSiteConfiguration SetJsonSerializerSettings(JsonSerializerSettings settings);
4561
}
4662
}

src/React/ReactComponent.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public string RenderJavaScript()
103103
return string.Format(
104104
"React.render({0}, document.getElementById({1}))",
105105
GetComponentInitialiser(),
106-
JsonConvert.SerializeObject(_containerId)
106+
JsonConvert.SerializeObject(_containerId, _environment.Configuration.JsonSerializerSettings)
107107
);
108108
}
109109

@@ -133,7 +133,7 @@ private void EnsureComponentExists()
133133
/// <returns>JavaScript for component initialisation</returns>
134134
private string GetComponentInitialiser()
135135
{
136-
var encodedProps = JsonConvert.SerializeObject(Props);
136+
var encodedProps = JsonConvert.SerializeObject(Props, _environment.Configuration.JsonSerializerSettings);
137137
return string.Format(
138138
"{0}({1})",
139139
_componentName,

src/React/ReactEnvironment.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,5 +412,13 @@ private JsRuntimeException WrapJavaScriptRuntimeException(JsRuntimeException ex)
412412
Source = ex.Source,
413413
};
414414
}
415+
416+
/// <summary>
417+
/// Gets the site-wide configuration.
418+
/// </summary>
419+
public IReactSiteConfiguration Configuration
420+
{
421+
get { return _config; }
422+
}
415423
}
416424
}

src/React/ReactSiteConfiguration.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10+
using Newtonsoft.Json;
1011
using System.Collections.Generic;
1112
using System.Collections.ObjectModel;
1213

@@ -32,6 +33,8 @@ static ReactSiteConfiguration()
3233
/// </summary>
3334
private readonly IList<string> _scriptFiles = new List<string>();
3435

36+
private JsonSerializerSettings _jsonSerializerSettings;
37+
3538
/// <summary>
3639
/// Adds a script to the list of scripts that are executed. This should be called for all
3740
/// React components and their dependencies.
@@ -60,7 +63,7 @@ public IList<string> Scripts
6063
/// </summary>
6164
/// <returns><c>true</c> if support for es6 syntax should be rewritten.</returns>
6265
public bool UseHarmony { get; set; }
63-
66+
6467
/// <summary>
6568
/// Specifies whether ES6 (harmony) syntax should be transformed
6669
/// </summary>
@@ -69,5 +72,27 @@ public IReactSiteConfiguration SetUseHarmony(bool useHarmony)
6972
UseHarmony = useHarmony;
7073
return this;
7174
}
75+
76+
/// <summary>
77+
/// Gets the configuration for json serializer.
78+
/// </summary>
79+
public JsonSerializerSettings JsonSerializerSettings
80+
{
81+
get { return _jsonSerializerSettings; }
82+
}
83+
84+
/// <summary>
85+
/// Sets the configuration for json serializer.
86+
/// </summary>
87+
/// <param name="settings">Settings.</param>
88+
/// <remarks>
89+
/// Thic confiquration is used when component initialization script
90+
/// is being generated server-side.
91+
/// </remarks>
92+
public IReactSiteConfiguration SetJsonSerializerSettings(JsonSerializerSettings settings)
93+
{
94+
_jsonSerializerSettings = settings;
95+
return this;
96+
}
7297
}
7398
}

0 commit comments

Comments
 (0)