XmlSerializerNamespaces.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. //------------------------------------------------------------------------------
  2. // <copyright file="XmlSerializerNamespaces.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">Microsoft</owner>
  6. //------------------------------------------------------------------------------
  7. namespace System.Xml.Serialization {
  8. using System.Reflection;
  9. using System.Collections;
  10. using System.IO;
  11. using System.Xml.Schema;
  12. using System;
  13. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces"]/*' />
  14. /// <devdoc>
  15. /// <para>[To be supplied.]</para>
  16. /// </devdoc>
  17. public class XmlSerializerNamespaces {
  18. Hashtable namespaces = null;
  19. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces"]/*' />
  20. /// <devdoc>
  21. /// <para>[To be supplied.]</para>
  22. /// </devdoc>
  23. public XmlSerializerNamespaces() {
  24. }
  25. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces1"]/*' />
  26. /// <internalonly/>
  27. /// <devdoc>
  28. /// <para>[To be supplied.]</para>
  29. /// </devdoc>
  30. public XmlSerializerNamespaces(XmlSerializerNamespaces namespaces) {
  31. this.namespaces = (Hashtable)namespaces.Namespaces.Clone();
  32. }
  33. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces2"]/*' />
  34. /// <devdoc>
  35. /// <para>[To be supplied.]</para>
  36. /// </devdoc>
  37. public XmlSerializerNamespaces(XmlQualifiedName[] namespaces) {
  38. for (int i = 0; i < namespaces.Length; i++) {
  39. XmlQualifiedName qname = namespaces[i];
  40. Add(qname.Name, qname.Namespace);
  41. }
  42. }
  43. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.Add"]/*' />
  44. /// <devdoc>
  45. /// <para>[To be supplied.]</para>
  46. /// </devdoc>
  47. public void Add(string prefix, string ns) {
  48. // parameter value check
  49. if (prefix != null && prefix.Length > 0)
  50. XmlConvert.VerifyNCName(prefix);
  51. if (ns != null && ns.Length > 0)
  52. XmlConvert.ToUri(ns);
  53. AddInternal(prefix, ns);
  54. }
  55. internal void AddInternal(string prefix, string ns) {
  56. Namespaces[prefix] = ns;
  57. }
  58. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.ToArray"]/*' />
  59. /// <devdoc>
  60. /// <para>[To be supplied.]</para>
  61. /// </devdoc>
  62. public XmlQualifiedName[] ToArray() {
  63. if (NamespaceList == null)
  64. return new XmlQualifiedName[0];
  65. return (XmlQualifiedName[])NamespaceList.ToArray(typeof(XmlQualifiedName));
  66. }
  67. /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.Count"]/*' />
  68. /// <devdoc>
  69. /// <para>[To be supplied.]</para>
  70. /// </devdoc>
  71. public int Count {
  72. get { return Namespaces.Count; }
  73. }
  74. internal ArrayList NamespaceList {
  75. get {
  76. if (namespaces == null || namespaces.Count == 0)
  77. return null;
  78. ArrayList namespaceList = new ArrayList();
  79. foreach(string key in Namespaces.Keys) {
  80. namespaceList.Add(new XmlQualifiedName(key, (string)Namespaces[key]));
  81. }
  82. return namespaceList;
  83. }
  84. }
  85. internal Hashtable Namespaces {
  86. get {
  87. if (namespaces == null)
  88. namespaces = new Hashtable();
  89. return namespaces;
  90. }
  91. set { namespaces = value; }
  92. }
  93. internal string LookupPrefix(string ns) {
  94. if (string.IsNullOrEmpty(ns))
  95. return null;
  96. if (namespaces == null || namespaces.Count == 0)
  97. return null;
  98. foreach(string prefix in namespaces.Keys) {
  99. if (!string.IsNullOrEmpty(prefix) && (string)namespaces[prefix] == ns) {
  100. return prefix;
  101. }
  102. }
  103. return null;
  104. }
  105. }
  106. }