public void WriteMessage(object message, IBufferWriter <byte> output) { if (_messageResolver.TryGetMessageId(message.GetType(), out var id)) { var options = new JsonWriterOptions(); var memory = MemoryBufferWriter.Get(); using var writer = new Utf8JsonWriter((IBufferWriter <byte>)memory, options); writer.WriteStartObject(); writer.WritePropertyName("$type"); writer.WriteStringValue(id); var str = JsonSerializer.Serialize(message); using var doc = JsonDocument.Parse(str); foreach (var property in doc.RootElement.EnumerateObject()) { property.WriteTo(writer); } writer.WriteEndObject(); writer.Flush(); memory.CopyTo(output); } }
public void WriteMessage(object message, IBufferWriter <byte> output) { // TODO: this should not silently fail if (_messageResolver.TryGetMessageId(message.GetType(), out var id)) { var memory = MemoryBufferWriter.Get(); var writer = new MessagePackWriter(memory); writer.WriteArrayHeader(2); writer.Write(id); MessagePackSerializer.Serialize(ref writer, message); writer.Flush(); BinaryMessageHelpers.WriteLengthPrefix(memory.Length, output); memory.CopyTo(output); MemoryBufferWriter.Return(memory); } }