diff --git a/src/Discord.Net.Serialization/Json/Converters/Primitives.String.cs b/src/Discord.Net.Serialization/Json/Converters/Primitives.String.cs index 243df1dd8..d51a23d10 100644 --- a/src/Discord.Net.Serialization/Json/Converters/Primitives.String.cs +++ b/src/Discord.Net.Serialization/Json/Converters/Primitives.String.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using System.Text.Utf8; namespace Discord.Serialization.Json.Converters { @@ -39,4 +40,24 @@ namespace Discord.Serialization.Json.Converters writer.WriteValue(value); } } + + internal class Utf8StringPropertyConverter : IJsonPropertyConverter + { + public Utf8String Read(PropertyMap map, ref JsonReader reader, bool isTopLevel) + { + if (isTopLevel) + reader.Read(); + if (reader.ValueType != JsonValueType.String) + throw new SerializationException("Bad input, expected String"); + return new Utf8String(reader.Value); + } + public void Write(PropertyMap map, ref JsonWriter writer, Utf8String value, bool isTopLevel) + { + //TODO: Serialization causes allocs, fix + if (isTopLevel) + writer.WriteAttribute(map.Utf16Key, value.ToString()); + else + writer.WriteValue(value.ToString()); + } + } } diff --git a/src/Discord.Net.Serialization/Json/JsonFormat.cs b/src/Discord.Net.Serialization/Json/JsonFormat.cs index 3126d0814..73df35d2b 100644 --- a/src/Discord.Net.Serialization/Json/JsonFormat.cs +++ b/src/Discord.Net.Serialization/Json/JsonFormat.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Text; using System.Text.Formatting; using System.Text.Json; +using System.Text.Utf8; namespace Discord.Serialization.Json { @@ -28,6 +29,7 @@ namespace Discord.Serialization.Json //AddConverter(); //char.Parse does not support Json.Net's serialization AddConverter(); + AddConverter(); AddConverter(); AddConverter();