public void WriteRaw(byte[] rawValue) { #if NETSTANDARD UnsafeMemory.WriteRaw(ref this, rawValue); #else BinaryUtil.EnsureCapacity(ref buffer, offset, rawValue.Length); Buffer.BlockCopy(rawValue, 0, buffer, offset, rawValue.Length); offset += rawValue.Length; #endif }
public void Serialize(ref MessagePackWriter writer, ref int idx, CultureInfo value, IFormatterResolver formatterResolver) { if (value != null) { var encodedBytes = MessagePackBinary.GetEncodedStringBytes(value.Name); UnsafeMemory.WriteRaw(ref writer, encodedBytes, ref idx); return; } writer.WriteNil(ref idx); }
public void Serialize(ref MessagePackWriter writer, ref int idx, T value, IFormatterResolver formatterResolver) { if (!valueNameMapping.TryGetValue(value, out string name)) { name = value.ToString(); // fallback for flags etc, But Enum.ToString is too slow. } var encodedName = MessagePackBinary.GetEncodedStringBytes(name); UnsafeMemory.WriteRaw(ref writer, encodedName, ref idx); }
static void SerializeWithLengthPrefixExt <T>(Stream stream, T data, IFormatterResolver resolver) { const int ExtTypeCode = 111; // sample ext code var serializedData = MessagePackSerializer.Serialize(data, resolver); var tmp = MessagePackSerializer.Deserialize <T>(serializedData, resolver); var dataSize = serializedData.Length; var idx = 0; var writer = new MessagePackWriter(16); var headerLength = MessagePackBinary.GetExtensionFormatHeaderLength(dataSize); writer.Ensure(idx, headerLength + dataSize); writer.WriteExtensionFormatHeader(ExtTypeCode, dataSize, ref idx); UnsafeMemory.WriteRaw(ref writer, serializedData, ref idx); var buffer = writer.ToArray(idx); stream.Write(buffer); }
public void Serialize(ref MessagePackWriter writer, ref int idx, object value, IFormatterResolver formatterResolver) { if (value == null) { writer.WriteNil(ref idx); return; } var type = value.GetType(); if (!s_typeNameCache.TryGetValue(type, out Type expectedType)) { GetExpectedTypeSlow(type, out expectedType); } if (expectedType == null) { Resolvers.TypelessFormatterFallbackResolver.Instance.GetFormatter <object>().Serialize(ref writer, ref idx, value, formatterResolver); return; } // don't use GetOrAdd for avoid closure capture. if (!s_serializers.TryGetValue(expectedType, out var formatterAndDelegate)) { GetFormatterAndDelegateSlow(expectedType, formatterResolver, out formatterAndDelegate); } // mark as extension with code 100 writer.Ensure(idx, 6); var startOffset = idx; idx += 6; // mark will be written at the end, when size is known var typeName = MessagePackBinary.GetEncodedTypeName(expectedType); UnsafeMemory.WriteRaw(ref writer, typeName, ref idx); formatterAndDelegate.Value(formatterAndDelegate.Key, ref writer, ref idx, value, formatterResolver); var dataLength = idx - startOffset - 6; MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref writer.PinnableAddress, startOffset, ExtensionTypeCode, dataLength); }
public void WriteRaw(MemoryStream ms) => UnsafeMemory.WriteRaw(ref this, ms);
public void WriteRaw(byte[] rawValue, int length) => UnsafeMemory.WriteRaw(ref this, rawValue, length);
public void WriteRaw(byte[] rawValue) => UnsafeMemory.WriteRaw(ref this, rawValue);