Mercurial > pub > ImplabNet
comparison Implab/Xml/JsonXmlReader.cs @ 265:74e048cbaac8 v3 v3.0.10
Restored lost JsonXmlCaseTransform from version 2.1
| author | cin |
|---|---|
| date | Mon, 16 Apr 2018 19:43:18 +0300 |
| parents | 3a6e18c432be |
| children |
comparison
equal
deleted
inserted
replaced
| 264:3a6e18c432be | 265:74e048cbaac8 |
|---|---|
| 54 | 54 |
| 55 readonly string m_xmlnsPrefix; | 55 readonly string m_xmlnsPrefix; |
| 56 readonly string m_xmlnsNamespace; | 56 readonly string m_xmlnsNamespace; |
| 57 readonly string m_xsiPrefix; | 57 readonly string m_xsiPrefix; |
| 58 readonly string m_xsiNamespace; | 58 readonly string m_xsiNamespace; |
| 59 readonly JsonXmlCaseTransform m_caseTransform; | |
| 59 | 60 |
| 60 | 61 |
| 61 public JsonXmlReader(JsonReader parser, JsonXmlReaderOptions options) { | 62 public JsonXmlReader(JsonReader parser, JsonXmlReaderOptions options) { |
| 62 Safe.ArgumentNotNull(parser, nameof(parser)); | 63 Safe.ArgumentNotNull(parser, nameof(parser)); |
| 63 m_parser = parser; | 64 m_parser = parser; |
| 73 m_jsonPrefix = m_nameTable.Add(m_options.NodesPrefix ?? string.Empty); | 74 m_jsonPrefix = m_nameTable.Add(m_options.NodesPrefix ?? string.Empty); |
| 74 m_xmlnsPrefix = m_nameTable.Add(XmlNameContext.XmlnsPrefix); | 75 m_xmlnsPrefix = m_nameTable.Add(XmlNameContext.XmlnsPrefix); |
| 75 m_xmlnsNamespace = m_nameTable.Add(XmlNameContext.XmlnsNamespace); | 76 m_xmlnsNamespace = m_nameTable.Add(XmlNameContext.XmlnsNamespace); |
| 76 m_xsiPrefix = m_nameTable.Add(XmlNameContext.XsiPrefix); | 77 m_xsiPrefix = m_nameTable.Add(XmlNameContext.XsiPrefix); |
| 77 m_xsiNamespace = m_nameTable.Add(XmlNameContext.XsiNamespace); | 78 m_xsiNamespace = m_nameTable.Add(XmlNameContext.XsiNamespace); |
| 79 | |
| 80 m_caseTransform = m_options.CaseTransform; | |
| 78 | 81 |
| 79 // TODO validate m_jsonRootName, m_jsonArrayItemName | 82 // TODO validate m_jsonRootName, m_jsonArrayItemName |
| 80 | 83 |
| 81 m_context = new XmlNameContext(null, 0); | 84 m_context = new XmlNameContext(null, 0); |
| 82 } | 85 } |
| 160 public override string Value { | 163 public override string Value { |
| 161 get { | 164 get { |
| 162 return m_value; | 165 return m_value; |
| 163 } | 166 } |
| 164 } | 167 } |
| 165 | 168 |
| 166 public override string GetAttribute(int i) { | 169 public override string GetAttribute(int i) { |
| 167 Safe.ArgumentInRange(i >= 0 && i < AttributeCount, nameof(i)); | 170 Safe.ArgumentInRange(i >= 0 && i < AttributeCount, nameof(i)); |
| 168 return m_attributes[i].Value; | 171 return m_attributes[i].Value; |
| 169 } | 172 } |
| 170 | 173 |
| 222 m_elementDepth = m_xmlDepth; | 225 m_elementDepth = m_xmlDepth; |
| 223 m_elementPrefix = m_prefix; | 226 m_elementPrefix = m_prefix; |
| 224 m_elementIsEmpty = m_isEmpty; | 227 m_elementIsEmpty = m_isEmpty; |
| 225 m_isAttribute = true; | 228 m_isAttribute = true; |
| 226 } | 229 } |
| 227 | 230 |
| 228 var attr = m_attributes[i]; | 231 var attr = m_attributes[i]; |
| 229 | 232 |
| 230 | 233 |
| 231 m_currentAttribute = i; | 234 m_currentAttribute = i; |
| 232 m_currentAttributeRead = false; | 235 m_currentAttributeRead = false; |
| 326 // define new namespaces | 329 // define new namespaces |
| 327 if (attrs != null) { | 330 if (attrs != null) { |
| 328 foreach (var attr in attrs) { | 331 foreach (var attr in attrs) { |
| 329 if (attr.QName.Name == "xmlns") { | 332 if (attr.QName.Name == "xmlns") { |
| 330 if (context == m_context) | 333 if (context == m_context) |
| 331 context = new XmlNameContext(m_context, m_xmlDepth); | 334 context = new XmlNameContext(m_context, m_xmlDepth); |
| 332 context.DefinePrefix(attr.Value, string.Empty); | 335 context.DefinePrefix(attr.Value, string.Empty); |
| 333 } else if (attr.Prefix == m_xmlnsPrefix) { | 336 } else if (attr.Prefix == m_xmlnsPrefix) { |
| 334 if (context == m_context) | 337 if (context == m_context) |
| 335 context = new XmlNameContext(m_context, m_xmlDepth); | 338 context = new XmlNameContext(m_context, m_xmlDepth); |
| 336 context.DefinePrefix(attr.Value, attr.QName.Name); | 339 context.DefinePrefix(attr.Value, attr.QName.Name); |
| 457 case JsonXmlReaderPosition.Error: | 460 case JsonXmlReaderPosition.Error: |
| 458 return false; | 461 return false; |
| 459 } | 462 } |
| 460 | 463 |
| 461 while (m_parser.Read()) { | 464 while (m_parser.Read()) { |
| 462 var jsonName = m_nameTable.Add(m_parser.ElementName); | 465 var jsonName = m_nameTable.Add(TransformJsonName(m_parser.ElementName)); |
| 463 | 466 |
| 464 switch (m_parser.ElementType) { | 467 switch (m_parser.ElementType) { |
| 465 case JsonElementType.BeginObject: | 468 case JsonElementType.BeginObject: |
| 466 if (!EnterJsonObject(jsonName, out elementName)) | 469 if (!EnterJsonObject(jsonName, out elementName)) |
| 467 continue; | 470 continue; |
| 587 m_jsonSkip = prev.skip; | 590 m_jsonSkip = prev.skip; |
| 588 | 591 |
| 589 return !skip; | 592 return !skip; |
| 590 } | 593 } |
| 591 | 594 |
| 595 private string TransformJsonName(string name) { | |
| 596 if (m_caseTransform == JsonXmlCaseTransform.None || string.IsNullOrEmpty(name)) { | |
| 597 return name; | |
| 598 } else if (m_caseTransform == JsonXmlCaseTransform.UcFirst) { | |
| 599 return JsonXmlReader.UppercaseFirst(name); | |
| 600 } else { | |
| 601 return JsonXmlReader.LowercaseFirst(name); | |
| 602 } | |
| 603 } | |
| 604 | |
| 592 protected override void Dispose(bool disposing) { | 605 protected override void Dispose(bool disposing) { |
| 593 if (disposing) | 606 if (disposing) |
| 594 Safe.Dispose(m_parser); | 607 Safe.Dispose(m_parser); |
| 595 base.Dispose(true); | 608 base.Dispose(true); |
| 596 } | 609 } |
| 614 } | 627 } |
| 615 } | 628 } |
| 616 | 629 |
| 617 #region static methods | 630 #region static methods |
| 618 | 631 |
| 632 // | |
| 633 // Static Methods | |
| 634 // | |
| 635 private static string LowercaseFirst(string s) { | |
| 636 char[] array = s.ToCharArray(); | |
| 637 array[0] = char.ToLower(array[0]); | |
| 638 return new string(array); | |
| 639 } | |
| 640 | |
| 641 private static string UppercaseFirst(string s) { | |
| 642 char[] array = s.ToCharArray(); | |
| 643 array[0] = char.ToUpper(array[0]); | |
| 644 return new string(array); | |
| 645 } | |
| 646 | |
| 619 public static JsonXmlReader CreateJsonXmlReader(TextReader textReader, JsonXmlReaderOptions options = null) { | 647 public static JsonXmlReader CreateJsonXmlReader(TextReader textReader, JsonXmlReaderOptions options = null) { |
| 620 var jsonReader = JsonReader.Create(textReader); | 648 var jsonReader = JsonReader.Create(textReader); |
| 621 return new JsonXmlReader(jsonReader, options); | 649 return new JsonXmlReader(jsonReader, options); |
| 622 } | 650 } |
| 623 | 651 |
