C# .net coreでのUtf8JsonのDecimalのserialize,desirialize


Decimal値をシリアライズしてデシリアライズしたらDouble値が返ってきます。
解決するにはResolver,Formatter,IJsonFormatterResolver,IJsonFormatter<>を使うようですがどのように記述するかわかりません。サンプルや実装例でもよいので解決策をお願いしたいです。

[code]

    using Microsoft.CodeAnalysis.CSharp.Scripting;
    using System;
    using System.Diagnostics;
    using Microsoft.CodeAnalysis.Scripting;
    using System.IO;
    namespace シリアライズテスト {
     public class Program {
         static void Main() {
             const String ファイル名 = @"Json.json";
             var Script = CSharpScript.Create(
                 "0.11111111111111111m",
                 ScriptOptions.Default.AddReferences(typeof(Object).Assembly)
                 .AddImports("System"),
                 typeof(Object)
             );
             var e= Script.CreateDelegate()("");
             e.Wait();
             var input = e.Result;
             using(var f = new FileStream(ファイル名,FileMode.Create)) {
                 Utf8Json.JsonSerializer.Serialize(f,input);
             }
             using(var f = new FileStream(ファイル名,FileMode.Open)) {
                 var output = Utf8Json.JsonSerializer.Deserialize<Object>(f);
                 Console.WriteLine($"{input.GetType()} {input}");
                 Console.WriteLine($"{output.GetType()} {output}");
                 Debug.Assert(input.GetType()==typeof(Decimal));
                 Debug.Assert(output.GetType()==typeof(Decimal));//error output.GetType()==typeof(Double)
             }
             Console.ReadKey();
         }
     }
    }
    
[/code]




こちらのテストプログラムが参考になるでしょう。  
[Utf8Json/tests/Utf8Json.Tests/DecimalTest.cs](https://github.com/neuecc/Utf8Json/blob/608cf01589cb3feb225a6e51a2324a24466fdaa6/tests/Utf8Json.Tests/DecimalTest.cs)

>
[code]

>     var d = decimal.MaxValue;
>     var bin = JsonSerializer.Serialize(d);
>     JsonSerializer.Deserialize<decimal>(bin).Is(d);
>  
[/code]

デシリアライズの時に明示的にタイプを指定する必要があると思われます。  
質問のソースで言えば以下の行になるでしょう。

[code]

    var output = Utf8Json.JsonSerializer.Deserialize<Object>(f);
    
[/code]

`<Object>`ではなく`<decimal>`を指定します。

[code]

    var output = Utf8Json.JsonSerializer.Deserialize<decimal>(f);
    
[/code]

同じテストプログラムの記述で、明示的にクラスで変数の型を指定しておけば、それで対応されるようです。

>
[code]

>     public class Foo
>     {
>         public decimal Bar { get; set; }
>         public string More { get; set; }
>     }
>  
>     var foo = JsonSerializer.Serialize(new Foo { Bar = -31.42323m, More =
> "mmmm" });
>     var ddd = JsonSerializer.Deserialize<Foo>(foo);
>     ddd.Bar.Is(-31.42323m);
>     ddd.More.Is("mmmm");
>  
[/code]

