Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 086a74b

Browse files
committed
Rewrite JsConfig to only read/write config instance snapshots
1 parent f902fca commit 086a74b

File tree

8 files changed

+324
-466
lines changed

8 files changed

+324
-466
lines changed

src/ServiceStack.Text/Common/DateTimeSerializer.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ public static class DateTimeSerializer
5656
/// <returns></returns>
5757
public static DateTime Prepare(this DateTime dateTime, bool parsedAsUtc = false)
5858
{
59-
if (JsConfig.SkipDateTimeConversion)
59+
var config = JsConfig.GetConfig();
60+
if (config.SkipDateTimeConversion)
6061
return dateTime;
6162

62-
if (JsConfig.AlwaysUseUtc)
63+
if (config.AlwaysUseUtc)
6364
return dateTime.Kind != DateTimeKind.Utc ? dateTime.ToStableUniversalTime() : dateTime;
6465

6566
return parsedAsUtc ? dateTime.ToLocalTime() : dateTime;
@@ -88,27 +89,28 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
8889
if (dateTimeStr.StartsWith(EscapedWcfJsonPrefix, StringComparison.Ordinal) || dateTimeStr.StartsWith(WcfJsonPrefix, StringComparison.Ordinal))
8990
return ParseWcfJsonDate(dateTimeStr).Prepare();
9091

92+
var config = JsConfig.GetConfig();
9193
if (dateTimeStr.Length == DefaultDateTimeFormat.Length)
9294
{
9395
var unspecifiedDate = DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture);
9496

95-
if (JsConfig.AssumeUtc)
97+
if (config.AssumeUtc)
9698
unspecifiedDate = DateTime.SpecifyKind(unspecifiedDate, DateTimeKind.Utc);
9799

98100
return unspecifiedDate.Prepare();
99101
}
100102

101103
if (dateTimeStr.Length == DefaultDateTimeFormatWithFraction.Length)
102104
{
103-
var unspecifiedDate = JsConfig.AssumeUtc
105+
var unspecifiedDate = config.AssumeUtc
104106
? DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
105107
: DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture);
106108

107109
return unspecifiedDate.Prepare();
108110
}
109111

110112
var kind = DateTimeKind.Unspecified;
111-
switch (JsConfig.DateHandler)
113+
switch (config.DateHandler)
112114
{
113115
case DateHandler.UnixTime:
114116
if (int.TryParse(dateTimeStr, out var unixTime))
@@ -121,7 +123,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
121123
case DateHandler.ISO8601:
122124
case DateHandler.ISO8601DateOnly:
123125
case DateHandler.ISO8601DateTime:
124-
if (JsConfig.SkipDateTimeConversion)
126+
if (config.SkipDateTimeConversion)
125127
dateTimeStr = RemoveUtcOffsets(dateTimeStr, out kind);
126128
break;
127129
}
@@ -160,7 +162,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
160162

161163
try
162164
{
163-
if (JsConfig.SkipDateTimeConversion)
165+
if (config.SkipDateTimeConversion)
164166
{
165167
return DateTime.Parse(dateTimeStr, null,
166168
kind == DateTimeKind.Unspecified
@@ -170,7 +172,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
170172
: DateTimeStyles.AssumeUniversal);
171173
}
172174

173-
var assumeKind = JsConfig.AssumeUtc ? DateTimeStyles.AssumeUniversal : DateTimeStyles.AssumeLocal;
175+
var assumeKind = config.AssumeUtc ? DateTimeStyles.AssumeUniversal : DateTimeStyles.AssumeLocal;
174176
var dateTime = DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture, assumeKind);
175177
return dateTime.Prepare();
176178
}
@@ -596,8 +598,10 @@ private static DateTime UseConfigSpecifiedSetting(this DateTime dateTime)
596598

597599
public static void WriteWcfJsonDate(TextWriter writer, DateTime dateTime)
598600
{
601+
var config = JsConfig.GetConfig();
602+
599603
dateTime = dateTime.UseConfigSpecifiedSetting();
600-
switch (JsConfig.DateHandler)
604+
switch (config.DateHandler)
601605
{
602606
case DateHandler.ISO8601:
603607
writer.Write(dateTime.ToString("o", CultureInfo.InvariantCulture));
@@ -617,16 +621,16 @@ public static void WriteWcfJsonDate(TextWriter writer, DateTime dateTime)
617621
string offset = null;
618622
if (dateTime.Kind != DateTimeKind.Utc)
619623
{
620-
if (JsConfig.DateHandler == DateHandler.TimestampOffset && dateTime.Kind == DateTimeKind.Unspecified)
624+
if (config.DateHandler == DateHandler.TimestampOffset && dateTime.Kind == DateTimeKind.Unspecified)
621625
offset = UnspecifiedOffset;
622626
else
623627
offset = LocalTimeZone.GetUtcOffset(dateTime).ToTimeOffsetString();
624628
}
625629
else
626630
{
627631
// Normally the JsonDateHandler.TimestampOffset doesn't append an offset for Utc dates, but if
628-
// the JsConfig.AppendUtcOffset is set then we will
629-
if (JsConfig.DateHandler == DateHandler.TimestampOffset && JsConfig.AppendUtcOffset.HasValue && JsConfig.AppendUtcOffset.Value)
632+
// the config.AppendUtcOffset is set then we will
633+
if (config.DateHandler == DateHandler.TimestampOffset && config.AppendUtcOffset)
630634
offset = UtcOffset;
631635
}
632636

src/ServiceStack.Text/Common/WriteType.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ private static bool Init()
257257

258258
internal struct TypePropertyWriter
259259
{
260-
internal string GetPropertyName(PropertyConfigs config)
260+
internal string GetPropertyName(Config config)
261261
{
262262
return config.EmitCamelCaseNames
263263
? propertyNameCLSFriendly
@@ -304,7 +304,7 @@ public TypePropertyWriter(Type propertyType, string propertyName, string propert
304304
this.isEnum = isEnum;
305305
}
306306

307-
public bool ShouldWriteProperty(object propertyValue, PropertyConfigs config)
307+
public bool ShouldWriteProperty(object propertyValue, Config config)
308308
{
309309
var isDefaultValue = propertyValue == null || Equals(DefaultValue, propertyValue);
310310
if (isDefaultValue)
@@ -393,7 +393,7 @@ public static void WriteProperties(TextWriter writer, object instance)
393393

394394
if (PropertyWriters != null)
395395
{
396-
var config = JsConfig<T>.GetPropertyConfigs();
396+
var config = JsConfig<T>.GetConfig();
397397

398398
var typedInstance = (T)instance;
399399
var len = PropertyWriters.Length;
@@ -466,7 +466,7 @@ private static void WriteLateboundProperties(TextWriter writer, object value, Ty
466466
if (!JsConfig<T>.ExcludeTypeInfo.GetValueOrDefault()) JsState.IsWritingDynamic = false;
467467
}
468468

469-
internal static string GetPropertyName(string propertyName, PropertyConfigs config)
469+
internal static string GetPropertyName(string propertyName, Config config)
470470
{
471471
return config.EmitCamelCaseNames
472472
? propertyName.ToCamelCase()
@@ -482,7 +482,7 @@ public static void WriteComplexQueryStringProperties(string typeName, TextWriter
482482
var i = 0;
483483
if (PropertyWriters != null)
484484
{
485-
var config = JsConfig<T>.GetPropertyConfigs();
485+
var config = JsConfig<T>.GetConfig();
486486

487487
var typedInstance = (T)instance;
488488
var len = PropertyWriters.Length;
@@ -564,7 +564,7 @@ public static void WriteQueryString(TextWriter writer, object instance)
564564
try
565565
{
566566
JsState.QueryStringMode = true;
567-
var config = JsConfig<T>.GetPropertyConfigs();
567+
var config = JsConfig<T>.GetConfig();
568568

569569
var i = 0;
570570
var typedInstance = (T)instance;

src/ServiceStack.Text/Env.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,12 @@ static Env()
136136

137137
public static bool SupportsDynamic { get; private set; }
138138

139-
public static bool StrictMode { get; set; }
139+
private static bool strictMode;
140+
public static bool StrictMode
141+
{
142+
get => strictMode;
143+
set => JsConfig.ThrowOnError = strictMode = value;
144+
}
140145

141146
public static string ServerUserAgent { get; set; }
142147

@@ -152,6 +157,7 @@ public static DateTime GetReleaseDate()
152157
public static string ReferenceAssembyPath => ReferenceAssemblyPath;
153158

154159
private static string referenceAssemblyPath;
160+
155161
public static string ReferenceAssemblyPath
156162
{
157163
get

0 commit comments

Comments
 (0)