听说 Json.NET 比 DataContractJsonSerializer 快,想试一试……
但是我在 JsonConvert 上找不到任何采用流而不是字符串的方法。
以在 WinPhone 上反序列化包含 JSON 的文件为例,我使用以下代码将文件内容读入字符串,然后反序列化为 JSON。在我的(非常临时的)测试中,它似乎比使用 DataContractJsonSerializer 直接从流中反序列化慢 4 倍......
// DCJS DataContractJsonSerializer dc = new DataContractJsonSerializer(typeof(Constants)); Constants constants = (Constants)dc.ReadObject(stream); // JSON.NET string json = new StreamReader(stream).ReadToEnd(); Constants constants = JsonConvert.DeserializeObject<Constants>(json);
我做错了吗?
更新: 这在当前版本中不再有效,请参阅下面的正确答案(无需投票,这在旧版本上是正确的 )。
当前版本的 Json.net 不允许您使用接受的答案代码。当前的替代方案是:
public static object DeserializeFromStream(Stream stream) { var serializer = new JsonSerializer(); using (var sr = new StreamReader(stream)) using (var jsonTextReader = new JsonTextReader(sr)) { return serializer.Deserialize(jsonTextReader); } }
使用JsonTextReader带有 a 的类StreamReader或使用直接JsonSerializer采用 a 的重载:StreamReader
JsonTextReader
StreamReader
JsonSerializer
var serializer = new JsonSerializer(); serializer.Deserialize(streamReader);