private static void SerializeValue(BinaryWriter writer, Encoding encoding, Type type, object value) {
var typeCode = GetTypeCode(type);
if (typeCode == null)
throw new NotSupportedException(String.Format("The type '{0}' is not supported.", type));
WriteValueHead(writer, typeCode.Value, type, value);
if (value == null)
return;
if (typeCode == ArrayType) {
var array = (Array) value;
var arrayLength = array.Length;
var arrayType = type.GetElementType();
for (int i = 0; i < arrayLength; i++) {
var element = array.GetValue(i);
SerializeValue(writer, encoding, arrayType, element);
}
} else if (typeCode == ObjectType) {
var serializer = new BinarySerializer {Encoding = encoding};
serializer.Serialize(writer, value);
} else if (typeCode == BooleanType) {
writer.Write((bool) value);
} else if (typeCode == ByteType) {
writer.Write((byte) value);
} else if (typeCode == Int16Type) {
writer.Write((short) value);
} else if (typeCode == Int32Type) {
writer.Write((int) value);
} else if (typeCode == Int64Type) {
writer.Write((long) value);
} else if (typeCode == SingleType) {
writer.Write((float) value);
} else if (typeCode == DoubleType) {
writer.Write((double) value);
} else if (typeCode == StringType) {
writer.Write((string) value);
}
}
}