2003-05-15: Jean-Marc ANDRE (jean-marc.andre@polymtl.ca)
[mono.git] / mcs / class / System.Runtime.Serialization.Formatters.Soap / System.Runtime.Serialization.Formatters.Soap / SoapFormatter.cs
1 // created on 07/04/2003 at 17:16\r
2 //\r
3 //      System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
4 //\r
5 //      Authors:\r
6 //              Jean-Marc Andre (jean-marc.andre@polymtl.ca)\r
7 //\r
8 \r
9 using System;\r
10 using System.IO;\r
11 using System.Runtime.Serialization;\r
12 using System.Runtime.Remoting.Messaging;\r
13 using System.Xml.Serialization;\r
14 \r
15 \r
16 namespace System.Runtime.Serialization.Formatters.Soap {\r
17         public class SoapFormatterT: IRemotingFormatter, IFormatter {\r
18                 private ObjectWriter _objWriter;\r
19                 private SoapWriter _soapWriter;\r
20                 private SerializationBinder _binder;\r
21                 private StreamingContext _context;\r
22                 private ISurrogateSelector _selector;\r
23                 \r
24                 public SoapFormatterT() {\r
25                 }\r
26                 \r
27                 public SoapFormatterT(ISurrogateSelector selector, StreamingContext context):this() {\r
28                         _selector = selector;\r
29                         _context = context;\r
30                 }\r
31                 \r
32                 ~SoapFormatterT() {\r
33                 }\r
34                 \r
35                 public object Deserialize(Stream serializationStream) {\r
36                         return Deserialize(serializationStream, null);\r
37                 }\r
38                 \r
39                 public object Deserialize(Stream serializationStream, HeaderHandler handler) {\r
40                         SoapParser parser = new SoapParser(serializationStream);\r
41                         SoapReader soapReader = new SoapReader(parser);\r
42                         ObjectReader reader = new ObjectReader(_selector, _context, soapReader);\r
43                         parser.Run();\r
44                         return reader.TopObject;\r
45                 }\r
46                 \r
47                 \r
48                 public void Serialize(Stream serializationStream, object graph) {\r
49                         Serialize(serializationStream, graph, null);\r
50                 }\r
51                 \r
52                 public void Serialize(Stream serializationStream, object graph, Header[] headers) {\r
53                         if(serializationStream == null)\r
54                                 throw new ArgumentNullException("serializationStream");\r
55                         if(!serializationStream.CanWrite)\r
56                                 throw new SerializationException("Can't write in the serialization stream");\r
57                         _soapWriter = new SoapWriter(serializationStream);\r
58                         _objWriter = new ObjectWriter((ISoapWriter) _soapWriter, _selector,  new StreamingContext(StreamingContextStates.File));\r
59                         _soapWriter.Writer = _objWriter;\r
60                         _objWriter.Serialize(graph);\r
61                         \r
62                 }\r
63                 \r
64                 public ISurrogateSelector SurrogateSelector {\r
65                         get {\r
66                                 return _selector;\r
67                         }\r
68                         set {\r
69                                 _selector = value;\r
70                         }\r
71                 }\r
72                 \r
73                 \r
74                 public SerializationBinder Binder {\r
75                         get {\r
76                                 return _binder;\r
77                         }\r
78                         set {\r
79                                 _binder = value;\r
80                         }\r
81                 }\r
82                 \r
83                 public StreamingContext Context {\r
84                         get {\r
85                                 return _context;\r
86                         }\r
87                         set {\r
88                                 _context = value;\r
89                         }\r
90                 }\r
91                 \r
92         }\r
93 }\r