我听说了.NET比DataContractJsonSerializer更快,并想try 一下...

但我在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);

我做错了吗?

推荐答案

UPDATE:这在当前版本中不再有效,请参阅below以获得正确答案(no need to vote down, this is correct on older versions).

JsonTextReader类与StreamReader类一起使用,或使用直接接受StreamReaderJsonSerializer重载:

var serializer = new JsonSerializer();
serializer.Deserialize(streamReader);

.net相关问答推荐

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

获取Ef-Core集合的DeleteBehavior

竖线在 PropertyGroup .csproj 文件中的含义

在 .NET 中使用 AES 解密时缺少后半字节

更改列表中的值

如何在 Windows 窗体上显示 ClickOnce 版本号

如何在 FtpWebRequest 之前判断 FTP 上是否存在文件

string.Format 如何处理空值?

在 C# DllImport 中使用 32 位或 64 位 dll

我什么时候应该在 C# 中使用使用块?

新的 netstandardapp 和 netcoreapp TFM 有什么区别?

在 C# 中使用委托

.NET 事件 - 什么是对象发送者和 EventArgs e?

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

当我们按下 Enter 键时启动的 WPF 文本框命令

如何在 WPF 中的 Xaml 文件中添加注释?

静态方法继承的正确替代方法是什么?

为什么 double.NaN 不等于自身?

获取系统中已安装的应用程序

程序员应该使用 SSIS,如果是,为什么?