1b9c39249c6ba87ae9098898396bebc621fd4851
[platform/upstream/dotnet/runtime.git] /
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3
4 using System;
5 using System.Runtime.Serialization.DataContracts;
6 using System.Xml;
7
8
9 namespace System.Runtime.Serialization
10 {
11     internal sealed class XmlSerializableWriter : XmlWriter
12     {
13         private XmlWriter _xmlWriter = null!; // initialized in BeginWrite
14         private int _depth;
15         private object? _obj;
16
17         internal void BeginWrite(XmlWriter xmlWriter, object obj)
18         {
19             _depth = 0;
20             _xmlWriter = xmlWriter;
21             _obj = obj;
22         }
23
24         internal void EndWrite()
25         {
26             if (_depth != 0)
27                 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.Format(SR.IXmlSerializableMissingEndElements, (_obj == null ? string.Empty : DataContract.GetClrTypeFullName(_obj.GetType())))));
28             _obj = null;
29         }
30
31         public override void WriteStartDocument()
32         {
33             if (WriteState == WriteState.Start)
34                 _xmlWriter.WriteStartDocument();
35         }
36         public override void WriteEndDocument() { _xmlWriter.WriteEndDocument(); }
37         public override void WriteStartDocument(bool standalone)
38         {
39             if (WriteState == WriteState.Start)
40                 _xmlWriter.WriteStartDocument(standalone);
41         }
42         public override void WriteDocType(string name, string? pubid, string? sysid, string? subset)
43         {
44             // XmlSerializer does not write doc type
45         }
46
47         public override void WriteStartElement(string? prefix, string localName, string? ns)
48         {
49             _xmlWriter.WriteStartElement(prefix, localName, ns);
50             _depth++;
51         }
52
53         public override void WriteEndElement()
54         {
55             if (_depth == 0)
56                 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.Format(SR.IXmlSerializableWritePastSubTree, (_obj == null ? string.Empty : DataContract.GetClrTypeFullName(_obj.GetType())))));
57             _xmlWriter.WriteEndElement();
58             _depth--;
59         }
60
61         public override void WriteFullEndElement()
62         {
63             if (_depth == 0)
64                 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.Format(SR.IXmlSerializableWritePastSubTree, (_obj == null ? string.Empty : DataContract.GetClrTypeFullName(_obj.GetType())))));
65             _xmlWriter.WriteFullEndElement();
66             _depth--;
67         }
68
69         public override void Close()
70         {
71             throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.IXmlSerializableIllegalOperation));
72         }
73
74         public override void WriteStartAttribute(string? prefix, string localName, string? ns)
75         {
76             _xmlWriter.WriteStartAttribute(prefix, localName, ns);
77         }
78
79         public override void WriteEndAttribute() { _xmlWriter.WriteEndAttribute(); }
80         public override void WriteCData(string? text) { _xmlWriter.WriteCData(text); }
81         public override void WriteComment(string? text) { _xmlWriter.WriteComment(text); }
82         public override void WriteProcessingInstruction(string name, string? text) { _xmlWriter.WriteProcessingInstruction(name, text); }
83         public override void WriteEntityRef(string name) { _xmlWriter.WriteEntityRef(name); }
84         public override void WriteCharEntity(char ch) { _xmlWriter.WriteCharEntity(ch); }
85         public override void WriteWhitespace(string? ws) { _xmlWriter.WriteWhitespace(ws); }
86         public override void WriteString(string? text) { _xmlWriter.WriteString(text); }
87         public override void WriteSurrogateCharEntity(char lowChar, char highChar) { _xmlWriter.WriteSurrogateCharEntity(lowChar, highChar); }
88         public override void WriteChars(char[] buffer, int index, int count) { _xmlWriter.WriteChars(buffer, index, count); }
89         public override void WriteRaw(char[] buffer, int index, int count) { _xmlWriter.WriteRaw(buffer, index, count); }
90         public override void WriteRaw(string data) { _xmlWriter.WriteRaw(data); }
91         public override void WriteBase64(byte[] buffer, int index, int count) { _xmlWriter.WriteBase64(buffer, index, count); }
92         public override void WriteBinHex(byte[] buffer, int index, int count) { _xmlWriter.WriteBinHex(buffer, index, count); }
93         public override WriteState WriteState { get { return _xmlWriter.WriteState; } }
94         public override void Flush() { _xmlWriter.Flush(); }
95         public override void WriteName(string name) { _xmlWriter.WriteName(name); }
96         public override void WriteQualifiedName(string localName, string? ns) { _xmlWriter.WriteQualifiedName(localName, ns); }
97         public override string? LookupPrefix(string ns) { return _xmlWriter.LookupPrefix(ns); }
98         public override XmlSpace XmlSpace { get { return _xmlWriter.XmlSpace; } }
99         public override string? XmlLang { get { return _xmlWriter.XmlLang; } }
100         public override void WriteNmToken(string name) { _xmlWriter.WriteNmToken(name); }
101     }
102 }