我有一些带有巨大整数的 json,大约有几百位数字。我想将它们解析为 BouncyCastle 的BigInteger
(https://github.com/onovotny/BouncyCastle-PCL/blob/pcl/crypto/src/math/BigInteger.cs https://github.com/onovotny/BouncyCastle-PCL/blob/pcl/crypto/src/math/BigInteger.cs).
{
"bigNumber":12093812947635091350945141034598534526723049126743245...
}
因此,我实现了一个转换器,在默认设置中使用合同解析器。
internal class BigIntegerConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteRawValue(value.ToString());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken jToken = JToken.Load(reader);
return new BigInteger(jToken.ToString());
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(BigInteger));
}
}
public class BigIntegerContractResolver : DefaultContractResolver
{
private static readonly JsonConverter bigIntegerConverter = new BigIntegerConverter();
private static Type type = typeof(BigInteger);
protected override JsonConverter ResolveContractConverter(Type objectType)
{
if (objectType == type)
{
return bigIntegerConverter;
}
return base.ResolveContractConverter(objectType);
}
}
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new BigIntegerContractResolver()
};
编写器按其应有的方式工作,写入一个(大)整数值,而不是类 BigInteger 及其所有属性等。但是,读取失败。 ReadJson 和 CanConvert 似乎都没有被调用。
我得到以下异常:
JsonReaderException:JSON整数340597435091750914358634185762341897561435984635897436598435643875643189576413589743659817456...对于Int64来说太大或太小。
如何让 Json.NET 将此数字解析为字符串而不是整数?
理想情况下,我不想先自己解析 json 字符串来添加引号。