Mat*_*ton 5 .net c# primitive json.net
有没有办法在处理原始类型时覆盖Json.net的默认反序列化行为?例如,当将json数组反序列化为[3.14,10,"test"]类型object[] 3.14时,类型为10,double而10类型long.反正我有可以拦截或覆盖此类型的决定,所以我可以反序列化值decimal,并int分别?
我基本上总是希望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}
Run Code Online (Sandbox Code Playgroud)
我想,这应该有效
public class MyReader : JsonTextReader
{
public MyReader(string s) : base(new StringReader(s))
{
}
protected override void SetToken(JsonToken newToken, object value)
{
object retObj = value;
if (retObj is long) retObj = Convert.ChangeType(retObj, typeof(int));
if (retObj is double) retObj = Convert.ChangeType(retObj, typeof(decimal));
base.SetToken(newToken, retObj);
}
}
object[] variousTypes = new object[] { 3.14m, 10, "test" };
string jsonString = JsonConvert.SerializeObject(variousTypes);
JsonSerializer serializer = new JsonSerializer();
var asObjectArray = serializer.Deserialize<object[]>(new MyReader(jsonString));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3517 次 |
| 最近记录: |