【发布时间】:2021-02-23 13:42:52
【问题描述】:
我正在使用 System.Text.Json 将 BigInteger 序列化为 JSON:
JsonSerializer.Serialize(new {foo = new BigInteger(ulong.MaxValue) + 1})
这会产生以下输出:
{"foo":{"IsPowerOfTwo":true,"IsZero":false,"IsOne":false,"IsEven":true,"Sign":1}}
如果我添加一个将BigInteger 值转换为ulong 的转换器,它当然会失败,因为BigInteger 值太大:
var options = new JsonSerializerOptions();
options.Converters.Add(new BigIntegerConverter());
JsonSerializer.Serialize(new {foo = new BigInteger(ulong.MaxValue) + 1}, options);
这是转换器:
public class BigIntegerConverter : JsonConverter<BigInteger>
{
public override BigInteger Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException();
public override void Write(Utf8JsonWriter writer, BigInteger value, JsonSerializerOptions options) => writer.WriteNumberValue((ulong)value);
}
我想要的输出是:
{"foo":18446744073709551616}
我知道这可以在 Json.NET 中使用 JsonWriter.WriteRawValue 来实现,但我仅限于使用 System.Text.Json。
有什么方法可以在不手动破解序列化字符串的情况下做到这一点?
【问题讨论】:
标签: c# biginteger system.text.json json-serialization jsonconverter