using System.Text; using LLama.Common; using Newtonsoft.Json; namespace LLama.Unittest { public class ModelsParamsTests { [Fact] public void SerializeRoundTripSystemTextJson() { var expected = new ModelParams("abc/123") { BatchSize = 17, ContextSize = 42, LoraAdapter = "adapter", Seed = 42, GpuLayerCount = 111 }; var json = System.Text.Json.JsonSerializer.Serialize(expected); var actual = System.Text.Json.JsonSerializer.Deserialize(json); Assert.Equal(expected, actual); } [Fact] public void SerializeRoundTripNewtonsoft() { var expected = new ModelParams("abc/123") { BatchSize = 17, ContextSize = 42, LoraAdapter = "adapter", Seed = 42, GpuLayerCount = 111 }; var settings = new Newtonsoft.Json.JsonSerializerSettings(); settings.Converters.Add(new NewtsonsoftEncodingConverter()); var json = Newtonsoft.Json.JsonConvert.SerializeObject(expected, settings); var actual = Newtonsoft.Json.JsonConvert.DeserializeObject(json, settings); Assert.Equal(expected, actual); } private class NewtsonsoftEncodingConverter : Newtonsoft.Json.JsonConverter { public override void WriteJson(JsonWriter writer, Encoding? value, JsonSerializer serializer) { writer.WriteValue((string?)value?.WebName); } public override Encoding? ReadJson(JsonReader reader, Type objectType, Encoding? existingValue, bool hasExistingValue, JsonSerializer serializer) { var name = (string?)reader.Value; if (name == null) return null; return Encoding.GetEncoding(name); } } } }