1111
1212using System ;
1313using System . Collections . Generic ;
14+ using System . Globalization ;
1415using System . IO ;
1516using System . Text ;
1617
@@ -42,7 +43,7 @@ public enum JsonToken
4243 public class JsonReader
4344 {
4445 #region Fields
45- private static IDictionary < int , IDictionary < int , int [ ] > > parse_table ;
46+ private static readonly IDictionary < int , IDictionary < int , int [ ] > > parse_table ;
4647
4748 private Stack < int > automaton_stack ;
4849 private int current_input ;
@@ -98,7 +99,7 @@ public object Value {
9899 #region Constructors
99100 static JsonReader ( )
100101 {
101- PopulateParseTable ( ) ;
102+ parse_table = PopulateParseTable ( ) ;
102103 }
103104
104105 public JsonReader ( string json_text ) :
@@ -138,120 +139,122 @@ private JsonReader (TextReader reader, bool owned)
138139
139140
140141 #region Static Methods
141- private static void PopulateParseTable ( )
142+ private static IDictionary < int , IDictionary < int , int [ ] > > PopulateParseTable ( )
142143 {
143144 // See section A.2. of the manual for details
144- parse_table = new Dictionary < int , IDictionary < int , int [ ] > > ( ) ;
145-
146- TableAddRow ( ParserToken . Array ) ;
147- TableAddCol ( ParserToken . Array , '[' ,
148- '[' ,
149- ( int ) ParserToken . ArrayPrime ) ;
150-
151- TableAddRow ( ParserToken . ArrayPrime ) ;
152- TableAddCol ( ParserToken . ArrayPrime , '"' ,
153- ( int ) ParserToken . Value ,
154-
155- ( int ) ParserToken . ValueRest ,
156- ']' ) ;
157- TableAddCol ( ParserToken . ArrayPrime , '[' ,
158- ( int ) ParserToken . Value ,
159- ( int ) ParserToken . ValueRest ,
160- ']' ) ;
161- TableAddCol ( ParserToken . ArrayPrime , ']' ,
162- ']' ) ;
163- TableAddCol ( ParserToken . ArrayPrime , '{' ,
164- ( int ) ParserToken . Value ,
165- ( int ) ParserToken . ValueRest ,
166- ']' ) ;
167- TableAddCol ( ParserToken . ArrayPrime , ( int ) ParserToken . Number ,
168- ( int ) ParserToken . Value ,
169- ( int ) ParserToken . ValueRest ,
170- ']' ) ;
171- TableAddCol ( ParserToken . ArrayPrime , ( int ) ParserToken . True ,
172- ( int ) ParserToken . Value ,
173- ( int ) ParserToken . ValueRest ,
174- ']' ) ;
175- TableAddCol ( ParserToken . ArrayPrime , ( int ) ParserToken . False ,
176- ( int ) ParserToken . Value ,
177- ( int ) ParserToken . ValueRest ,
178- ']' ) ;
179- TableAddCol ( ParserToken . ArrayPrime , ( int ) ParserToken . Null ,
180- ( int ) ParserToken . Value ,
181- ( int ) ParserToken . ValueRest ,
182- ']' ) ;
183-
184- TableAddRow ( ParserToken . Object ) ;
185- TableAddCol ( ParserToken . Object , '{' ,
186- '{' ,
187- ( int ) ParserToken . ObjectPrime ) ;
188-
189- TableAddRow ( ParserToken . ObjectPrime ) ;
190- TableAddCol ( ParserToken . ObjectPrime , '"' ,
191- ( int ) ParserToken . Pair ,
192- ( int ) ParserToken . PairRest ,
193- '}' ) ;
194- TableAddCol ( ParserToken . ObjectPrime , '}' ,
195- '}' ) ;
196-
197- TableAddRow ( ParserToken . Pair ) ;
198- TableAddCol ( ParserToken . Pair , '"' ,
199- ( int ) ParserToken . String ,
200- ':' ,
201- ( int ) ParserToken . Value ) ;
202-
203- TableAddRow ( ParserToken . PairRest ) ;
204- TableAddCol ( ParserToken . PairRest , ',' ,
205- ',' ,
206- ( int ) ParserToken . Pair ,
207- ( int ) ParserToken . PairRest ) ;
208- TableAddCol ( ParserToken . PairRest , '}' ,
209- ( int ) ParserToken . Epsilon ) ;
210-
211- TableAddRow ( ParserToken . String ) ;
212- TableAddCol ( ParserToken . String , '"' ,
213- '"' ,
214- ( int ) ParserToken . CharSeq ,
215- '"' ) ;
216-
217- TableAddRow ( ParserToken . Text ) ;
218- TableAddCol ( ParserToken . Text , '[' ,
219- ( int ) ParserToken . Array ) ;
220- TableAddCol ( ParserToken . Text , '{' ,
221- ( int ) ParserToken . Object ) ;
222-
223- TableAddRow ( ParserToken . Value ) ;
224- TableAddCol ( ParserToken . Value , '"' ,
225- ( int ) ParserToken . String ) ;
226- TableAddCol ( ParserToken . Value , '[' ,
227- ( int ) ParserToken . Array ) ;
228- TableAddCol ( ParserToken . Value , '{' ,
229- ( int ) ParserToken . Object ) ;
230- TableAddCol ( ParserToken . Value , ( int ) ParserToken . Number ,
231- ( int ) ParserToken . Number ) ;
232- TableAddCol ( ParserToken . Value , ( int ) ParserToken . True ,
233- ( int ) ParserToken . True ) ;
234- TableAddCol ( ParserToken . Value , ( int ) ParserToken . False ,
235- ( int ) ParserToken . False ) ;
236- TableAddCol ( ParserToken . Value , ( int ) ParserToken . Null ,
237- ( int ) ParserToken . Null ) ;
238-
239- TableAddRow ( ParserToken . ValueRest ) ;
240- TableAddCol ( ParserToken . ValueRest , ',' ,
241- ',' ,
242- ( int ) ParserToken . Value ,
243- ( int ) ParserToken . ValueRest ) ;
244- TableAddCol ( ParserToken . ValueRest , ']' ,
245- ( int ) ParserToken . Epsilon ) ;
145+ IDictionary < int , IDictionary < int , int [ ] > > parse_table = new Dictionary < int , IDictionary < int , int [ ] > > ( ) ;
146+
147+ TableAddRow ( parse_table , ParserToken . Array ) ;
148+ TableAddCol ( parse_table , ParserToken . Array , '[' ,
149+ '[' ,
150+ ( int ) ParserToken . ArrayPrime ) ;
151+
152+ TableAddRow ( parse_table , ParserToken . ArrayPrime ) ;
153+ TableAddCol ( parse_table , ParserToken . ArrayPrime , '"' ,
154+ ( int ) ParserToken . Value ,
155+
156+ ( int ) ParserToken . ValueRest ,
157+ ']' ) ;
158+ TableAddCol ( parse_table , ParserToken . ArrayPrime , '[' ,
159+ ( int ) ParserToken . Value ,
160+ ( int ) ParserToken . ValueRest ,
161+ ']' ) ;
162+ TableAddCol ( parse_table , ParserToken . ArrayPrime , ']' ,
163+ ']' ) ;
164+ TableAddCol ( parse_table , ParserToken . ArrayPrime , '{' ,
165+ ( int ) ParserToken . Value ,
166+ ( int ) ParserToken . ValueRest ,
167+ ']' ) ;
168+ TableAddCol ( parse_table , ParserToken . ArrayPrime , ( int ) ParserToken . Number ,
169+ ( int ) ParserToken . Value ,
170+ ( int ) ParserToken . ValueRest ,
171+ ']' ) ;
172+ TableAddCol ( parse_table , ParserToken . ArrayPrime , ( int ) ParserToken . True ,
173+ ( int ) ParserToken . Value ,
174+ ( int ) ParserToken . ValueRest ,
175+ ']' ) ;
176+ TableAddCol ( parse_table , ParserToken . ArrayPrime , ( int ) ParserToken . False ,
177+ ( int ) ParserToken . Value ,
178+ ( int ) ParserToken . ValueRest ,
179+ ']' ) ;
180+ TableAddCol ( parse_table , ParserToken . ArrayPrime , ( int ) ParserToken . Null ,
181+ ( int ) ParserToken . Value ,
182+ ( int ) ParserToken . ValueRest ,
183+ ']' ) ;
184+
185+ TableAddRow ( parse_table , ParserToken . Object ) ;
186+ TableAddCol ( parse_table , ParserToken . Object , '{' ,
187+ '{' ,
188+ ( int ) ParserToken . ObjectPrime ) ;
189+
190+ TableAddRow ( parse_table , ParserToken . ObjectPrime ) ;
191+ TableAddCol ( parse_table , ParserToken . ObjectPrime , '"' ,
192+ ( int ) ParserToken . Pair ,
193+ ( int ) ParserToken . PairRest ,
194+ '}' ) ;
195+ TableAddCol ( parse_table , ParserToken . ObjectPrime , '}' ,
196+ '}' ) ;
197+
198+ TableAddRow ( parse_table , ParserToken . Pair ) ;
199+ TableAddCol ( parse_table , ParserToken . Pair , '"' ,
200+ ( int ) ParserToken . String ,
201+ ':' ,
202+ ( int ) ParserToken . Value ) ;
203+
204+ TableAddRow ( parse_table , ParserToken . PairRest ) ;
205+ TableAddCol ( parse_table , ParserToken . PairRest , ',' ,
206+ ',' ,
207+ ( int ) ParserToken . Pair ,
208+ ( int ) ParserToken . PairRest ) ;
209+ TableAddCol ( parse_table , ParserToken . PairRest , '}' ,
210+ ( int ) ParserToken . Epsilon ) ;
211+
212+ TableAddRow ( parse_table , ParserToken . String ) ;
213+ TableAddCol ( parse_table , ParserToken . String , '"' ,
214+ '"' ,
215+ ( int ) ParserToken . CharSeq ,
216+ '"' ) ;
217+
218+ TableAddRow ( parse_table , ParserToken . Text ) ;
219+ TableAddCol ( parse_table , ParserToken . Text , '[' ,
220+ ( int ) ParserToken . Array ) ;
221+ TableAddCol ( parse_table , ParserToken . Text , '{' ,
222+ ( int ) ParserToken . Object ) ;
223+
224+ TableAddRow ( parse_table , ParserToken . Value ) ;
225+ TableAddCol ( parse_table , ParserToken . Value , '"' ,
226+ ( int ) ParserToken . String ) ;
227+ TableAddCol ( parse_table , ParserToken . Value , '[' ,
228+ ( int ) ParserToken . Array ) ;
229+ TableAddCol ( parse_table , ParserToken . Value , '{' ,
230+ ( int ) ParserToken . Object ) ;
231+ TableAddCol ( parse_table , ParserToken . Value , ( int ) ParserToken . Number ,
232+ ( int ) ParserToken . Number ) ;
233+ TableAddCol ( parse_table , ParserToken . Value , ( int ) ParserToken . True ,
234+ ( int ) ParserToken . True ) ;
235+ TableAddCol ( parse_table , ParserToken . Value , ( int ) ParserToken . False ,
236+ ( int ) ParserToken . False ) ;
237+ TableAddCol ( parse_table , ParserToken . Value , ( int ) ParserToken . Null ,
238+ ( int ) ParserToken . Null ) ;
239+
240+ TableAddRow ( parse_table , ParserToken . ValueRest ) ;
241+ TableAddCol ( parse_table , ParserToken . ValueRest , ',' ,
242+ ',' ,
243+ ( int ) ParserToken . Value ,
244+ ( int ) ParserToken . ValueRest ) ;
245+ TableAddCol ( parse_table , ParserToken . ValueRest , ']' ,
246+ ( int ) ParserToken . Epsilon ) ;
247+
248+ return parse_table ;
246249 }
247250
248- private static void TableAddCol ( ParserToken row , int col ,
251+ private static void TableAddCol ( IDictionary < int , IDictionary < int , int [ ] > > parse_table , ParserToken row , int col ,
249252 params int [ ] symbols )
250253 {
251254 parse_table [ ( int ) row ] . Add ( col , symbols ) ;
252255 }
253256
254- private static void TableAddRow ( ParserToken rule )
257+ private static void TableAddRow ( IDictionary < int , IDictionary < int , int [ ] > > parse_table , ParserToken rule )
255258 {
256259 parse_table . Add ( ( int ) rule , new Dictionary < int , int [ ] > ( ) ) ;
257260 }
@@ -266,7 +269,7 @@ private void ProcessNumber (string number)
266269 number . IndexOf ( 'E' ) != - 1 ) {
267270
268271 double n_double ;
269- if ( Double . TryParse ( number , out n_double ) ) {
272+ if ( double . TryParse ( number , NumberStyles . Any , CultureInfo . InvariantCulture , out n_double ) ) {
270273 token = JsonToken . Double ;
271274 token_value = n_double ;
272275
@@ -275,23 +278,23 @@ private void ProcessNumber (string number)
275278 }
276279
277280 int n_int32 ;
278- if ( Int32 . TryParse ( number , out n_int32 ) ) {
281+ if ( int . TryParse ( number , NumberStyles . Integer , CultureInfo . InvariantCulture , out n_int32 ) ) {
279282 token = JsonToken . Int ;
280283 token_value = n_int32 ;
281284
282285 return ;
283286 }
284287
285288 long n_int64 ;
286- if ( Int64 . TryParse ( number , out n_int64 ) ) {
289+ if ( long . TryParse ( number , NumberStyles . Integer , CultureInfo . InvariantCulture , out n_int64 ) ) {
287290 token = JsonToken . Long ;
288291 token_value = n_int64 ;
289292
290293 return ;
291294 }
292295
293296 ulong n_uint64 ;
294- if ( UInt64 . TryParse ( number , out n_uint64 ) )
297+ if ( ulong . TryParse ( number , NumberStyles . Integer , CultureInfo . InvariantCulture , out n_uint64 ) )
295298 {
296299 token = JsonToken . Long ;
297300 token_value = n_uint64 ;
0 commit comments