反序列化對象時,我有以下測試代碼:意外標記在JsonConvert.DeserializeObject
[TestClass]
public class TestJsonDeserialize
{
public class MyClass
{
[JsonProperty("myint")]
public int MyInt { get; set; }
[JsonProperty("Mybool")]
public bool Mybool { get; set; }
}
[TestMethod]
public void Test1()
{
var errors = new List<string>();
var json1 = "{\"myint\":1554860000,\"Mybool\":false}";
var json2 = "{\"myint\":3554860000,\"Mybool\":false}";
var i = JsonConvert.DeserializeObject<MyClass>(json2, new JsonSerializerSettings
{
Error = delegate (object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
{
Debug.WriteLine(args.ErrorContext.Error.Message);
errors.Add(args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
}
});
Assert.IsTrue(errors.Count <= 1);
}
}
到JsonConvert.DeserializeObject呼叫產生2個錯誤。其中一個是預期的,但另一個不是。 錯誤是:
- JSON整數3554860000對於Int32來說太大或太小。路徑'myint',第1行,位置19.
- 反序列化對象時的意外標記:布爾值。 Path'Mybool',line 1,position 34.
雖然第一個錯誤被標記爲已處理,但爲什麼會出現第二個錯誤? 我已經從Newtonsoft.Json 8.0.2更新到9.0.1,但它仍然存在。 當傳遞第一個字符串(json1而不是json2)時,根本沒有錯誤發生。
的workouround適用於我的測試項目。非常感謝。我現在按照你的建議在github上報告了一個問題。 – huha