Предположим, у нас есть следующий код:
Type t = typeof(UInt64);
var def = Activator.CreateInstance(t);
Console.WriteLine(def.GetType());
string json = "18446744073709551615";
object parsedObject = JsonConvert.DeserializeAnonymousType(json, def);
Console.WriteLine(parsedObject.GetType());
Вывод:
System.UInt64
System.Numerics.BigInteger
Так как я явно указывал DeserializeAnonymousType
с def
, типом которого является UInt64
, я ожидал бы также UInt64
в качестве вывода, тем более что 18446744073709551615 является действительным значением UInt64
(максимальное значение предоставлено, но я проверил также с 18446744073709551614, это то же самое).
Почему это так? Я проверил проблемы Newtonsoft Github и ничего не нашел (по крайней мере, не в открытых проблемах).
Как я могу форсировать правильный тип, который я знаю заранее (динамически, у меня есть только System.Type
)? Очевидно, что если это происходит только для UInt64
, я могу сделать проверку и привести в явном виде.