Mercurial > pub > ImplabNet
comparison Implab/JSON/JSONXmlReader.cs @ 63:908b4f340c69
fixed: JSONXmlReader.Value returns invalid textual representation for numbers.
| author | cin |
|---|---|
| date | Mon, 23 Jun 2014 17:34:40 +0400 |
| parents | 10c7337d29e7 |
| children | a809805210d1 |
comparison
equal
deleted
inserted
replaced
| 62:62b440d46313 | 63:908b4f340c69 |
|---|---|
| 1 using Implab; | 1 using Implab; |
| 2 using Implab.Parsing; | 2 using Implab.Parsing; |
| 3 using System; | 3 using System; |
| 4 using System.Collections.Generic; | 4 using System.Collections.Generic; |
| 5 using System.Globalization; | |
| 5 using System.IO; | 6 using System.IO; |
| 6 using System.Linq; | 7 using System.Linq; |
| 7 using System.Text; | 8 using System.Text; |
| 8 using System.Threading.Tasks; | 9 using System.Threading.Tasks; |
| 9 using System.Xml; | 10 using System.Xml; |
| 35 readonly string m_prefix; | 36 readonly string m_prefix; |
| 36 readonly string m_namespaceUri; | 37 readonly string m_namespaceUri; |
| 37 readonly bool m_flattenArrays; | 38 readonly bool m_flattenArrays; |
| 38 readonly string m_arrayItemName; | 39 readonly string m_arrayItemName; |
| 39 readonly XmlNameTable m_nameTable; | 40 readonly XmlNameTable m_nameTable; |
| 40 | 41 readonly bool m_disposeParser; |
| 42 | |
| 41 public JSONXmlReader(JSONParser parser, JSONXmlReaderOptions options) { | 43 public JSONXmlReader(JSONParser parser, JSONXmlReaderOptions options) { |
| 42 Safe.ArgumentNotNull(parser, "parser"); | 44 Safe.ArgumentNotNull(parser, "parser"); |
| 43 m_parser = parser; | 45 m_parser = parser; |
| 44 | 46 |
| 45 if (options != null) { | 47 if (options != null) { |
| 47 m_namespaceUri = options.NamespaceURI ?? String.Empty; | 49 m_namespaceUri = options.NamespaceURI ?? String.Empty; |
| 48 m_rootName = options.RootName ?? "json"; | 50 m_rootName = options.RootName ?? "json"; |
| 49 m_flattenArrays = options.FlattenArrays; | 51 m_flattenArrays = options.FlattenArrays; |
| 50 m_arrayItemName = options.ArrayItemName ?? "item"; | 52 m_arrayItemName = options.ArrayItemName ?? "item"; |
| 51 m_nameTable = options.NameTable ?? new NameTable(); | 53 m_nameTable = options.NameTable ?? new NameTable(); |
| 54 m_disposeParser = options.DisposeParser; | |
| 52 } else { | 55 } else { |
| 53 m_prefix = String.Empty; | 56 m_prefix = String.Empty; |
| 54 m_namespaceUri = String.Empty; | 57 m_namespaceUri = String.Empty; |
| 55 m_rootName = "json"; | 58 m_rootName = "json"; |
| 56 m_flattenArrays = false; | 59 m_flattenArrays = false; |
| 57 m_arrayItemName = "item"; | 60 m_arrayItemName = "item"; |
| 58 m_nameTable = new NameTable(); | 61 m_nameTable = new NameTable(); |
| 62 m_disposeParser = false; | |
| 59 } | 63 } |
| 60 } | 64 } |
| 61 | 65 |
| 62 /// <summary> | 66 /// <summary> |
| 63 /// Always 0, JSON doesn't support attributes | 67 /// Always 0, JSON doesn't support attributes |
| 70 get { return String.Empty; } | 74 get { return String.Empty; } |
| 71 } | 75 } |
| 72 | 76 |
| 73 public override int Depth { | 77 public override int Depth { |
| 74 get { | 78 get { |
| 75 return m_localNameStack.Count+m_depthCorrection; | 79 return m_localNameStack.Count + m_depthCorrection; |
| 76 } | 80 } |
| 77 } | 81 } |
| 78 | 82 |
| 79 public override bool EOF { | 83 public override bool EOF { |
| 80 get { return m_parser.EOF; } | 84 get { return m_parser.EOF; } |
| 268 public override void ResolveEntity() { | 272 public override void ResolveEntity() { |
| 269 // do nothing | 273 // do nothing |
| 270 } | 274 } |
| 271 | 275 |
| 272 public override string Value { | 276 public override string Value { |
| 273 get { return m_parser.ElementValue == null ? String.Empty : m_parser.ElementValue.ToString(); } | 277 get { |
| 278 if (m_parser.ElementValue == null) | |
| 279 return String.Empty; | |
| 280 if (Convert.GetTypeCode(m_parser.ElementValue) == TypeCode.Double) | |
| 281 return ((double)m_parser.ElementValue).ToString(CultureInfo.InvariantCulture); | |
| 282 else | |
| 283 return (string)m_parser.ElementValue; | |
| 284 } | |
| 274 } | 285 } |
| 275 | 286 |
| 276 void SetLocalName(string name) { | 287 void SetLocalName(string name) { |
| 277 m_localNameStack.Push(m_localName); | 288 m_localNameStack.Push(m_localName); |
| 278 m_localName.localName = name; | 289 m_localName.localName = name; |
| 288 void RestoreLocalName() { | 299 void RestoreLocalName() { |
| 289 m_localName = m_localNameStack.Pop(); | 300 m_localName = m_localNameStack.Pop(); |
| 290 } | 301 } |
| 291 | 302 |
| 292 public override void Close() { | 303 public override void Close() { |
| 293 | 304 |
| 294 } | 305 } |
| 295 | 306 |
| 296 protected override void Dispose(bool disposing) { | 307 protected override void Dispose(bool disposing) { |
| 297 if (disposing) { | 308 if (disposing) { |
| 298 m_parser.Dispose(); | 309 if (m_disposeParser) |
| 310 m_parser.Dispose(); | |
| 299 } | 311 } |
| 300 base.Dispose(disposing); | 312 base.Dispose(disposing); |
| 301 } | 313 } |
| 302 | 314 |
| 303 | 315 |
