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。是否有优雅而简单的方法来禁止这个?
答案 0 :(得分:0)
使Json.Net严格需要相当多的工作,但它可能已经完成(你必须为你需要的所有类型实现自定义严格JsonConverter
)。图书馆作者的官方立场是使用JSON模式进行验证。
我不会过分担心验证,除非它确实成为一个问题。有很多动态类型的语言可以按照他们想要的方式转换变量类型,人们可以设法有效地使用它们。 :) Json.Net也遵循同样的理念。