Added `JsonConverter` attribute, so System.Text.Json serialization is seamless
This commit is contained in:
parent
ee772a2921
commit
77aa5fa0d0
|
@ -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<ModelParams>(json, options);
|
||||
var json = System.Text.Json.JsonSerializer.Serialize(expected);
|
||||
var actual = System.Text.Json.JsonSerializer.Deserialize<ModelParams>(json);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
private class SystemTextJsonEncodingConverter
|
||||
: System.Text.Json.Serialization.JsonConverter<Encoding>
|
||||
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
|
|
@ -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
|
|||
/// <summary>
|
||||
/// The encoding to use to convert text for the model
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(EncodingConverter))]
|
||||
public Encoding Encoding { get; set; } = Encoding.UTF8;
|
||||
|
||||
/// <summary>
|
||||
|
@ -188,4 +190,21 @@ namespace LLama.Common
|
|||
Encoding = Encoding.GetEncoding(encoding);
|
||||
}
|
||||
}
|
||||
|
||||
internal class EncodingConverter
|
||||
: JsonConverter<Encoding>
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue