\r
ISurrogateSelector _surrogateSelector;\r
StreamingContext _context;\r
+ FormatterAssemblyStyle _assemblyFormat;\r
\r
class TypeMetadata\r
{\r
}\r
}\r
\r
- public ObjectWriter(ISurrogateSelector surrogateSelector, StreamingContext context)\r
+ public ObjectWriter (ISurrogateSelector surrogateSelector, StreamingContext context, FormatterAssemblyStyle assemblyFormat)\r
{\r
_surrogateSelector = surrogateSelector;\r
_context = context;\r
+ _assemblyFormat = assemblyFormat;\r
}\r
\r
public void WriteObjectGraph (BinaryWriter writer, object obj, Header[] headers)\r
if (isValueObject) id = _idGenerator.NextId;\r
else id = _idGenerator.GetId (obj, out firstTime);\r
\r
- if (obj.GetType() == typeof(string)) {\r
+ if (obj is string) {\r
WriteString (writer, id, (string)obj);\r
}\r
- else if (obj.GetType().IsArray) {\r
+ else if (obj is Array) {\r
WriteArray (writer, id, (Array)obj);\r
}\r
else\r
// Value types are written embedded in the containing object\r
WriteObjectInstance (writer, val, true);\r
}\r
- else if (val.GetType() == typeof(string))\r
+ else if (val is string)\r
{\r
// Strings are written embedded, unless already registered\r
bool firstTime;\r
{\r
writer.Write ((byte) BinaryElement.Assembly);\r
writer.Write (id);\r
- writer.Write (assembly.GetName ().FullName);\r
+ if (_assemblyFormat == FormatterAssemblyStyle.Full)\r
+ writer.Write (assembly.GetName ().FullName);\r
+ else\r
+ writer.Write (assembly.GetName ().Name);\r
}\r
\r
private int GetAssemblyId (Assembly assembly)\r
\r
public static void WritePrimitiveValue (BinaryWriter writer, object value)\r
{\r
- switch (Type.GetTypeCode (value.GetType()))\r
+ Type type = value.GetType();\r
+\r
+ switch (Type.GetTypeCode (type))\r
{\r
case TypeCode.Boolean:\r
writer.Write ((bool)value);\r
break;\r
\r
default:\r
- throw new NotSupportedException ("Unsupported primitive type: " + value.GetType().FullName);\r
+ if (type == typeof (TimeSpan))\r
+ writer.Write (((TimeSpan)value).Ticks);\r
+ else\r
+ throw new NotSupportedException ("Unsupported primitive type: " + value.GetType().FullName);\r
+ break;\r
}\r
}\r
\r