public void Serialize()

in src/StreamJsonRpc/MessagePackFormatter.cs [1823:1902]


            public void Serialize(ref MessagePackWriter writer, Protocol.JsonRpcRequest value, MessagePackSerializerOptions options)
            {
                var topLevelPropertyBagMessage = value as IMessageWithTopLevelPropertyBag;

                int mapElementCount = value.RequestId.IsEmpty ? 3 : 4;
                if (value.TraceParent?.Length > 0)
                {
                    mapElementCount++;
                    if (value.TraceState?.Length > 0)
                    {
                        mapElementCount++;
                    }
                }

                mapElementCount += topLevelPropertyBagMessage?.TopLevelPropertyBag?.PropertyCount ?? 0;
                writer.WriteMapHeader(mapElementCount);

                WriteProtocolVersionPropertyAndValue(ref writer, value.Version);

                if (!value.RequestId.IsEmpty)
                {
                    IdPropertyName.Write(ref writer);
                    options.Resolver.GetFormatterWithVerify<RequestId>().Serialize(ref writer, value.RequestId, options);
                }

                MethodPropertyName.Write(ref writer);
                writer.Write(value.Method);

                ParamsPropertyName.Write(ref writer);
                if (value.ArgumentsList is not null)
                {
                    writer.WriteArrayHeader(value.ArgumentsList.Count);
                    for (int i = 0; i < value.ArgumentsList.Count; i++)
                    {
                        object? arg = value.ArgumentsList[i];
                        if (value.ArgumentListDeclaredTypes is object)
                        {
                            MessagePackSerializer.Serialize(value.ArgumentListDeclaredTypes[i], ref writer, arg, this.formatter.userDataSerializationOptions);
                        }
                        else
                        {
                            DynamicObjectTypeFallbackFormatter.Instance.Serialize(ref writer, arg, this.formatter.userDataSerializationOptions);
                        }
                    }
                }
                else if (value.NamedArguments is not null)
                {
                    writer.WriteMapHeader(value.NamedArguments.Count);
                    foreach (KeyValuePair<string, object?> entry in value.NamedArguments)
                    {
                        writer.Write(entry.Key);
                        if (value.NamedArgumentDeclaredTypes?[entry.Key] is Type argType)
                        {
                            MessagePackSerializer.Serialize(argType, ref writer, entry.Value, this.formatter.userDataSerializationOptions);
                        }
                        else
                        {
                            DynamicObjectTypeFallbackFormatter.Instance.Serialize(ref writer, entry.Value, this.formatter.userDataSerializationOptions);
                        }
                    }
                }
                else
                {
                    writer.WriteNil();
                }

                if (value.TraceParent?.Length > 0)
                {
                    TraceParentPropertyName.Write(ref writer);
                    options.Resolver.GetFormatterWithVerify<TraceParent>().Serialize(ref writer, new TraceParent(value.TraceParent), options);

                    if (value.TraceState?.Length > 0)
                    {
                        TraceStatePropertyName.Write(ref writer);
                        WriteTraceState(ref writer, value.TraceState);
                    }
                }

                topLevelPropertyBagMessage?.TopLevelPropertyBag?.WritePropertiesAndClear(ref writer);
            }