XmlSerializableWriter.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.Runtime.Serialization
  5. {
  6. using System;
  7. using System.Xml;
  8. internal class XmlSerializableWriter : XmlWriter
  9. {
  10. XmlWriter xmlWriter;
  11. int depth = 0;
  12. object obj;
  13. internal void BeginWrite(XmlWriter xmlWriter, object obj)
  14. {
  15. depth = 0;
  16. this.xmlWriter = xmlWriter;
  17. this.obj = obj;
  18. }
  19. internal void EndWrite()
  20. {
  21. if (depth != 0)
  22. throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableMissingEndElements, (obj == null ? string.Empty : DataContract.GetClrTypeFullName(obj.GetType())))));
  23. this.obj = null;
  24. }
  25. public override void WriteStartDocument()
  26. {
  27. if (WriteState == WriteState.Start)
  28. xmlWriter.WriteStartDocument();
  29. }
  30. public override void WriteEndDocument() { xmlWriter.WriteEndDocument(); }
  31. public override void WriteStartDocument(bool standalone)
  32. {
  33. if (WriteState == WriteState.Start)
  34. xmlWriter.WriteStartDocument(standalone);
  35. }
  36. public override void WriteDocType(string name, string pubid, string sysid, string subset)
  37. {
  38. // XmlSerializer does not write doc type
  39. }
  40. public override void WriteStartElement(string prefix, string localName, string ns)
  41. {
  42. xmlWriter.WriteStartElement(prefix, localName, ns);
  43. depth++;
  44. }
  45. public override void WriteEndElement()
  46. {
  47. if (depth == 0)
  48. throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableWritePastSubTree, (obj == null ? string.Empty : DataContract.GetClrTypeFullName(obj.GetType())))));
  49. xmlWriter.WriteEndElement();
  50. depth--;
  51. }
  52. public override void WriteFullEndElement()
  53. {
  54. if (depth == 0)
  55. throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableWritePastSubTree, (obj == null ? string.Empty : DataContract.GetClrTypeFullName(obj.GetType())))));
  56. xmlWriter.WriteFullEndElement();
  57. depth--;
  58. }
  59. public override void Close()
  60. {
  61. throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.IXmlSerializableIllegalOperation)));
  62. }
  63. public override void WriteStartAttribute(string prefix, string localName, string ns)
  64. {
  65. xmlWriter.WriteStartAttribute(prefix, localName, ns);
  66. }
  67. public override void WriteEndAttribute() { xmlWriter.WriteEndAttribute(); }
  68. public override void WriteCData(string text) { xmlWriter.WriteCData(text); }
  69. public override void WriteComment(string text) { xmlWriter.WriteComment(text); }
  70. public override void WriteProcessingInstruction(string name, string text) { xmlWriter.WriteProcessingInstruction(name, text); }
  71. public override void WriteEntityRef(string name) { xmlWriter.WriteEntityRef(name); }
  72. public override void WriteCharEntity(char ch) { xmlWriter.WriteCharEntity(ch); }
  73. public override void WriteWhitespace(string ws) { xmlWriter.WriteWhitespace(ws); }
  74. public override void WriteString(string text) { xmlWriter.WriteString(text); }
  75. public override void WriteSurrogateCharEntity(char lowChar, char highChar) { xmlWriter.WriteSurrogateCharEntity(lowChar, highChar); }
  76. public override void WriteChars(Char[] buffer, int index, int count) { xmlWriter.WriteChars(buffer, index, count); }
  77. public override void WriteRaw(Char[] buffer, int index, int count) { xmlWriter.WriteRaw(buffer, index, count); }
  78. public override void WriteRaw(String data) { xmlWriter.WriteRaw(data); }
  79. public override void WriteBase64(byte[] buffer, int index, int count) { xmlWriter.WriteBase64(buffer, index, count); }
  80. public override void WriteBinHex(byte[] buffer, int index, int count) { xmlWriter.WriteBinHex(buffer, index, count); }
  81. public override WriteState WriteState { get { return xmlWriter.WriteState; } }
  82. public override void Flush() { xmlWriter.Flush(); }
  83. public override void WriteName(string name) { xmlWriter.WriteName(name); }
  84. public override void WriteQualifiedName(string localName, string ns) { xmlWriter.WriteQualifiedName(localName, ns); }
  85. public override string LookupPrefix(string ns) { return xmlWriter.LookupPrefix(ns); }
  86. public override XmlSpace XmlSpace { get { return xmlWriter.XmlSpace; } }
  87. public override string XmlLang { get { return xmlWriter.XmlLang; } }
  88. public override void WriteNmToken(string name) { xmlWriter.WriteNmToken(name); }
  89. }
  90. }