如何禁止Json.Net将int转换为bool以进行反序列化

时间:2013-06-04 14:03:57

标签: c# json json.net deserialization

public class RootobjectTest
{
    public int timestamp { get; set; }
    public string Base { get; set; }
    public Rates rates { get; set; }
}

public class Rates
{
    public float AED { get; set; }
    public float AFN { get; set; }
    public float ALL { get; set; }
    public float AMD { get; set; }
    public float YER { get; set; }
    public float ZAR { get; set; }
    public float ZMK { get; set; }
    public float ZMW { get; set; }
    public float ZWL { get; set; }
}

var jsonData = @"{ ""timestamp"": 1370340068,  ""base"": ""USD"",  ""rates"": {       
""AED"":
3.672958,    ""AFN"": 54.154801,    ""ALL"": 107.66425,    ""AMD"": 419.62875,  
""YER"": 214.964253,    ""ZAR"": 9.813218,    ""ZMK"": 5227.108333,    ""ZMW"": 5.344453,
""ZWL"": 322.387247  }}";

var currencyRates = JsonConvert.DeserializeObject<RootobjectTest>(jsonData); 

一切都很好并且完美无缺。但是如果我改变了

public int timestamp { get; set; } 

public bool timestamp { get; set; }

我没有收到任何错误。 Json.Net解析时间戳的int值并将其转换为bool。是否有优雅而简单的方法来禁止这个?

1 个答案:

答案 0 :(得分:0)

使Json.Net严格需要相当多的工作,但它可能已经完成(你必须为你需要的所有类型实现自定义严格JsonConverter)。图书馆作者的官方立场是使用JSON模式进行验证。

我不会过分担心验证,除非它确实成为一个问题。有很多动态类型的语言可以按照他们想要的方式转换变量类型,人们可以设法有效地使用它们。 :) Json.Net也遵循同样的理念。