comparison Implab/JSON/JSONWriter.cs @ 142:2100965eb97f v2

fixed JSONWriter handling Infinity, NaN and locale aware number formatting
author cin
date Wed, 04 Mar 2015 03:10:38 +0300
parents 0fa293bb1351
children 3258399cba83
comparison
equal deleted inserted replaced
141:0fa293bb1351 142:2100965eb97f
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
3 using System.IO; 3 using System.IO;
4 using System.Globalization;
4 5
5 namespace Implab.JSON { 6 namespace Implab.JSON {
6 public class JSONWriter { 7 public class JSONWriter {
7 struct Context { 8 struct Context {
8 public bool needComma; 9 public bool needComma;
33 _escapeQ = "\\\"".ToCharArray(); 34 _escapeQ = "\\\"".ToCharArray();
34 } 35 }
35 36
36 public JSONWriter(TextWriter writer) { 37 public JSONWriter(TextWriter writer) {
37 Safe.ArgumentNotNull(writer, "writer"); 38 Safe.ArgumentNotNull(writer, "writer");
38
39 m_writer = writer; 39 m_writer = writer;
40 } 40 }
41 41
42 public JSONWriter(TextWriter writer, bool indent) { 42 public JSONWriter(TextWriter writer, bool indent) {
43 Safe.ArgumentNotNull(writer, "writer"); 43 Safe.ArgumentNotNull(writer, "writer");
260 260
261 m_writer.Write('"'); 261 m_writer.Write('"');
262 } 262 }
263 263
264 void Write(double value) { 264 void Write(double value) {
265 m_writer.Write(value); 265 if (double.IsNaN(value))
266 Write("NaN");
267 else if (double.IsNegativeInfinity(value))
268 Write("-Infinity");
269 else if (double.IsPositiveInfinity(value))
270 Write("Infinity");
271 else
272 m_writer.Write(value.ToString(CultureInfo.InvariantCulture));
266 } 273 }
267 274
268 void OperationNotApplicable(string opName) { 275 void OperationNotApplicable(string opName) {
269 throw new InvalidOperationException(String.Format("The operation '{0}' isn't applicable in the context of '{1}'", opName, m_context.element )); 276 throw new InvalidOperationException(String.Format("The operation '{0}' isn't applicable in the context of '{1}'", opName, m_context.element ));
270 } 277 }