反序列化对象时,我有以下测试代码:意外标记在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