4 // Dick Porter (dick@ximian.com)
5 // Lluis Sanchez Gual (lsg@ctv.es)
7 // (C) 2002 Ximian, Inc. http://www.ximian.com
9 using System.Runtime.Serialization.Formatters;
10 using System.Runtime.Serialization;
11 using System.Reflection;
12 using System.Collections;
14 using System.Runtime.Remoting.Messaging;
16 namespace System.Runtime.Serialization.Formatters.Binary {
17 public sealed class BinaryFormatter : IRemotingFormatter, IFormatter
19 private FormatterAssemblyStyle assembly_format;
20 private SerializationBinder binder;
21 private StreamingContext context;
22 private ISurrogateSelector surrogate_selector;
23 private FormatterTypeStyle type_format;
25 public BinaryFormatter()
27 surrogate_selector=null;
28 context=new StreamingContext(StreamingContextStates.All);
31 public BinaryFormatter(ISurrogateSelector selector, StreamingContext context)
33 surrogate_selector=selector;
37 public FormatterAssemblyStyle AssemblyFormat
40 return(assembly_format);
43 assembly_format=value;
47 public SerializationBinder Binder
57 public StreamingContext Context
67 public ISurrogateSelector SurrogateSelector
70 return(surrogate_selector);
73 surrogate_selector=value;
77 public FormatterTypeStyle TypeFormat
87 public object Deserialize(Stream serializationStream)
89 if(serializationStream==null) {
90 throw new ArgumentNullException("serializationStream is null");
92 if(serializationStream.CanSeek &&
93 serializationStream.Length==0) {
94 throw new SerializationException("serializationStream supports seeking, but its length is 0");
97 ObjectReader serializer = new ObjectReader (surrogate_selector, context);
98 BinaryReader reader = new BinaryReader (serializationStream);
99 return serializer.ReadObjectGraph (reader);
103 public object Deserialize(Stream serializationStream, HeaderHandler handler)
105 if(serializationStream==null) {
106 throw new ArgumentNullException("serializationStream is null");
108 if(serializationStream.CanSeek &&
109 serializationStream.Length==0) {
110 throw new SerializationException("serializationStream supports seeking, but its length is 0");
117 public object DeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallmessage)
119 if(serializationStream==null) {
120 throw new ArgumentNullException("serializationStream is null");
122 if(serializationStream.CanSeek &&
123 serializationStream.Length==0) {
124 throw new SerializationException("serializationStream supports seeking, but its length is 0");
130 public void Serialize(Stream serializationStream, object graph)
132 if(serializationStream==null) {
133 throw new ArgumentNullException("serializationStream is null");
136 ObjectWriter serializer = new ObjectWriter (surrogate_selector, context);
137 BinaryWriter writer = new BinaryWriter (serializationStream);
138 serializer.WriteObjectGraph (writer, graph);
143 public void Serialize(Stream serializationStream, object graph, Header[] headers)
145 if(serializationStream==null) {
146 throw new ArgumentNullException("serializationStream is null");
149 // fixme: what about headers?
150 Serialize (serializationStream, graph);