From 77aa5fa0d0547cb253f5682ac41be01044d30b9a Mon Sep 17 00:00:00 2001 From: Martin Evans Date: Thu, 24 Aug 2023 16:17:49 +0100 Subject: [PATCH] Added `JsonConverter` attribute, so System.Text.Json serialization is seamless --- LLama.Unittest/ModelsParamsTests.cs | 25 ++----------------------- LLama/Common/ModelParams.cs | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/LLama.Unittest/ModelsParamsTests.cs b/LLama.Unittest/ModelsParamsTests.cs index 0d657e1c..317b1b85 100644 --- a/LLama.Unittest/ModelsParamsTests.cs +++ b/LLama.Unittest/ModelsParamsTests.cs @@ -19,33 +19,12 @@ namespace LLama.Unittest GpuLayerCount = 111 }; - var options = new System.Text.Json.JsonSerializerOptions(); - options.Converters.Add(new SystemTextJsonEncodingConverter()); - - var json = System.Text.Json.JsonSerializer.Serialize(expected, options); - var actual = System.Text.Json.JsonSerializer.Deserialize(json, options); + var json = System.Text.Json.JsonSerializer.Serialize(expected); + var actual = System.Text.Json.JsonSerializer.Deserialize(json); Assert.Equal(expected, actual); } - private class SystemTextJsonEncodingConverter - : System.Text.Json.Serialization.JsonConverter - - { - public override Encoding? Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) - { - var name = reader.GetString(); - if (name == null) - return null; - return Encoding.GetEncoding(name); - } - - public override void Write(System.Text.Json.Utf8JsonWriter writer, Encoding value, System.Text.Json.JsonSerializerOptions options) - { - writer.WriteStringValue(value.WebName); - } - } - [Fact] public void SerializeRoundTripNewtonsoft() { diff --git a/LLama/Common/ModelParams.cs b/LLama/Common/ModelParams.cs index 2d1273d1..a9b573d4 100644 --- a/LLama/Common/ModelParams.cs +++ b/LLama/Common/ModelParams.cs @@ -1,6 +1,7 @@ using LLama.Abstractions; using System; using System.Text; +using System.Text.Json; using System.Text.Json.Serialization; namespace LLama.Common @@ -116,6 +117,7 @@ namespace LLama.Common /// /// The encoding to use to convert text for the model /// + [JsonConverter(typeof(EncodingConverter))] public Encoding Encoding { get; set; } = Encoding.UTF8; /// @@ -188,4 +190,21 @@ namespace LLama.Common Encoding = Encoding.GetEncoding(encoding); } } + + internal class EncodingConverter + : JsonConverter + { + public override Encoding? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var name = reader.GetString(); + if (name == null) + return null; + return Encoding.GetEncoding(name); + } + + public override void Write(Utf8JsonWriter writer, Encoding value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.WebName); + } + } }