以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSerializer,但是最近在项目中需要序列化和反序列化一个实现接口的类,而如果使用JavaScriptSerializer的话就会出现问题,我们来看看如下场景。
首先我们有一个接口IPeople和一个实现了该接口的类Man
interface IPeople { string Name { get; set; } int Age { get; set; } } class Man : IPeople { public string Name { get; set; } public int Age { get; set; } }
我们使用JavaScriptSerializer直接序列化IPeople接口
IPeople poeple = new Man(); poeple.Age = 25; poeple.Name = "Scott"; JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); string textJson = jsSerializer.Serialize(poeple); poeple = jsSerializer.Deserialize<IPeople>(textJson);
会得到序列化后的json文本textJson如下
{"Name":"Scott","Age":25}
我们可以看到在序列化后的json中没有任何属性说明这段json到底是由什么类序列化而来的,紧接着在JavaScriptSerializer执行jsSerializer.Deserialize<IPeople>(textJson)的时候就抛出了异常提示IPeople没有默认构造函数,也就是说JavaScriptSerializer不知道应该把textJson中的json反序列化为类Man。
而如果我们使用的是Json.NET的话,就可以完美的实现接口接口IPeople的序列化和反序列化
时间: 2024-10-13 14:42:24