0
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。有没有优雅而简单的方法来禁止这种情况?

4

1 回答 1

0

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

我不会太担心验证,除非它真的成为一个问题。有很多动态类型语言可以以任何他们想要的方式转换变量类型,并且人们以某种​​方式设法有效地使用它们。:) Json.Net 遵循同样的理念。

于 2013-06-07T06:20:30.837 回答