@@ -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
0 commit comments