diff --git a/src/Nerdbank.MessagePack/MessagePackWriter.cs b/src/Nerdbank.MessagePack/MessagePackWriter.cs index 31655e51..0c54c448 100644 --- a/src/Nerdbank.MessagePack/MessagePackWriter.cs +++ b/src/Nerdbank.MessagePack/MessagePackWriter.cs @@ -674,13 +674,18 @@ public unsafe void Write(string? value) } ref byte buffer = ref this.WriteString_PrepareSpan(value.Length, out int bufferSize, out int useOffset); - fixed (char* pValue = value) + fixed (byte* pBuffer = &buffer) { - fixed (byte* pBuffer = &buffer) + int byteCount; +#if NET + byteCount = StringEncoding.UTF8.GetBytes(value, new Span(pBuffer + useOffset, bufferSize - useOffset)); +#else + fixed (char* pValue = value) { - int byteCount = StringEncoding.UTF8.GetBytes(pValue, value.Length, pBuffer + useOffset, bufferSize); - this.WriteString_PostEncoding(pBuffer, useOffset, byteCount); + byteCount = StringEncoding.UTF8.GetBytes(pValue, value.Length, pBuffer + useOffset, bufferSize - useOffset); } +#endif + this.WriteString_PostEncoding(pBuffer, useOffset, byteCount); } } @@ -695,13 +700,18 @@ public unsafe void Write(string? value) public unsafe void Write(scoped ReadOnlySpan value) { ref byte buffer = ref this.WriteString_PrepareSpan(value.Length, out int bufferSize, out int useOffset); - fixed (char* pValue = value) + fixed (byte* pBuffer = &buffer) { - fixed (byte* pBuffer = &buffer) + int byteCount; +#if NET + byteCount = StringEncoding.UTF8.GetBytes(value, new Span(pBuffer + useOffset, bufferSize - useOffset)); +#else + fixed (char* pValue = value) { - int byteCount = StringEncoding.UTF8.GetBytes(pValue, value.Length, pBuffer + useOffset, bufferSize); - this.WriteString_PostEncoding(pBuffer, useOffset, byteCount); + byteCount = StringEncoding.UTF8.GetBytes(pValue, value.Length, pBuffer + useOffset, bufferSize - useOffset); } +#endif + this.WriteString_PostEncoding(pBuffer, useOffset, byteCount); } }