public static void ReadValue(this ICdlValueWriter writer, BinaryReader stream) { TypeStorage storage = (TypeStorage)stream.ReadByte(); switch (storage) { case TypeStorage.Null: writer.SetNull(); break; case TypeStorage.Boolean: writer.SetBoolean(stream.ReadBoolean()); break; case TypeStorage.Byte: writer.SetByte(stream.ReadByte()); break; case TypeStorage.Int16: writer.SetInt16(stream.ReadInt16()); break; case TypeStorage.Int32: writer.SetInt32(stream.ReadInt32()); break; case TypeStorage.Int64: writer.SetInt64(stream.ReadInt64()); break; case TypeStorage.SByte: writer.SetSByte(stream.ReadSByte()); break; case TypeStorage.UInt16: writer.SetUInt16(stream.ReadUInt16()); break; case TypeStorage.UInt32: writer.SetUInt32(stream.ReadUInt32()); break; case TypeStorage.UInt64: writer.SetUInt64(stream.ReadUInt64()); break; case TypeStorage.Float: writer.SetFloat(stream.ReadSingle()); break; case TypeStorage.Double: writer.SetDouble(stream.ReadDouble()); break; case TypeStorage.Decimal: writer.SetDecimal(stream.ReadDecimal()); break; case TypeStorage.DateTime: writer.SetDateTime(DateTime.FromBinary(stream.ReadInt64())); break; case TypeStorage.DateTimeEx: writer.SetDateTimeEx(DateTimeEx.FromStream(stream)); break; case TypeStorage.DateEx: writer.SetDateEx(DateEx.FromStream(stream)); break; case TypeStorage.TimeEx: writer.SetTimeEx(TimeEx.FromStream(stream)); break; case TypeStorage.ByteArray: { int len = stream.Read7BitEncodedInteger(); writer.SetByteArray(stream.ReadBytes(len)); } break; case TypeStorage.Guid: writer.SetGuid(new Guid(stream.ReadBytes(16))); break; case TypeStorage.String: writer.SetString(stream.ReadString()); break; } }