我听说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);
字符串
我做错了吗?
7条答案
按热度按时间332nm8kg1#
当前版本的Json.net不允许您使用接受的答案代码。当前的替代方案是:
字符串
文件:Deserialize JSON from a file stream
zz2j4svz2#
字符串
f4t66c6m3#
**更新:**在当前版本中不再有效,正确答案见below(无需投票否决,在旧版本中正确)。
将
JsonTextReader
类与StreamReader
一起使用,或者使用直接接受StreamReader
的JsonSerializer
重载:字符串
blmhpbnm4#
我写了一个扩展类来帮助我从JSON源(字符串、流、文件)反序列化。
字符串
现在反序列化就像写代码一样简单:
型
希望它能帮助别人。
cczfrluj5#
我在寻找一种方法来将一个开放的对象列表流到
System.IO.Stream
上,并从另一端读取它们,而无需在发送之前缓冲整个列表。(具体来说,我正在通过Web API从MongoDB流式传输持久化对象。@Paul Tyng和@Rivers非常出色地回答了最初的问题,我用他们的答案为我的问题建立了一个概念证明。我决定在这里发布我的测试控制台应用程序,以防其他人也面临同样的问题。
字符串
请注意,当
AnonymousPipeServerStream
被释放时,您可能会收到一个异常,我忽略了它,因为它与手头的问题无关。2guxujil6#
另一个选择是在Json中阅读,在JsonConvert类上使用DeserializeObject:
字符串
p4tfgftt7#
当内存不足时,另一个方便的选择是定期刷新
字符串
你可以这样测试/使用它:
型
你需要创建扩展方法,这里是整个集合:
型