以下示例说明了Json.NET类型处理的一个基本缺陷:
List<object> items = new List<object>() {Guid.NewGuid(),DateTime.Now};
var settings = new JsonSerializerSettings() { TypeNameHandling=TypeNameHandling.All };
var json = JsonConvert.SerializeObject<List<object>>(value,settings);
Run Code Online (Sandbox Code Playgroud)
产生以下JSON:
{"$type":"System.Collections.Generic.List`1[[System.Object, mscorlib]], mscorlib","$values":["9d7aa4d3-a340-4cee-baa8-6af0582b8acd","2014-07-28T21:03:17.1287029-04:00"]}
Run Code Online (Sandbox Code Playgroud)
如您所见,列表项已丢失其类型信息.反序列化相同的JSON将导致列表只包含字符串.
此问题先前已在codeplex上报告并且已经完全关闭,说明包含类型信息会使JSON过于混乱.我很惊讶我们没有给出单独的选项来包括原始类型信息,因为往返一致性被打破了.
https://json.codeplex.com/workitem/23833
我希望数据返回时带有与之相同的类型信息.有没有人有任何建议或解决方法来纠正这种不良行为?
谢谢,
克里斯