示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }