5
有没有办法在处理基元类型时覆盖Json.net的默认反序列化行为?例如,当将json数组[3.14,10,"test"]
解串为object[]
类型时3.14将是double
和将是long
类型。无论如何,我可以拦截或覆盖这种类型的决定,所以我可以反序列化的值分别为decimal
和int
?覆盖Json.Net中的默认基元类型处理
我基本上总是希望json整数始终返回为int
并漂浮返回为decimal
。这将节省我一些不得不在我的代码中注入double
到decimal
转换。
我已经研究了扩展Newtonsoft.Json.Serialization.DefaultContractResolver
并实现我自己的Newtonsoft.Json.JsonConverter
,但我还没有发现任何方法来实现这个所需的覆盖。
示例代码重现
object[] variousTypes = new object[] {3.14m, 10, "test"};
string jsonString = JsonConvert.SerializeObject(variousTypes);
object[] asObjectArray = JsonConvert.DeserializeObject<object[]>(jsonString); // Contains object {double}, object {long}, object {string}
JsonTextReader.SetToken是不是在我json.net 4.5.1的发布,标志着虚拟的,所以覆盖抛出'没有合适的方法来替代'。我错过了什么吗? – 2012-03-28 22:11:33
@MatthewRuston我目前的Json.Net版本是'4.0.5'。 – 2012-03-28 22:13:54
看起来像他们删除了最近版本中的虚拟属性。奇怪。 – 2012-03-28 22:15:03