Json.NET能否对流进行序列化/反序列化?

Json.NET能否对流进行序列化/反序列化?

我听说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);

我做错了吗?


RISEBY
浏览 329回答 3
3回答

蓝山帝景

这在当前版本中不再有效,请参阅下面的正确答案(无需拒绝投票,这在旧版本中是正确的)。使用JsonTextReader带有a&nbsp;的类StreamReader或使用直接带有的JsonSerializer重载StreamReader:var&nbsp;serializer&nbsp;=&nbsp;new&nbsp;JsonSerializer();serializer.Deserialize(streamReader);

qq_笑_17

public&nbsp;static&nbsp;void&nbsp;Serialize(object&nbsp;value,&nbsp;Stream&nbsp;s){ &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(StreamWriter&nbsp;writer&nbsp;=&nbsp;new&nbsp;StreamWriter(s)) &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(JsonTextWriter&nbsp;jsonWriter&nbsp;=&nbsp;new&nbsp;JsonTextWriter(writer)) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonSerializer&nbsp;ser&nbsp;=&nbsp;new&nbsp;JsonSerializer(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ser.Serialize(jsonWriter,&nbsp;value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsonWriter.Flush(); &nbsp;&nbsp;&nbsp;&nbsp;}}public&nbsp;static&nbsp;T&nbsp;Deserialize<T>(Stream&nbsp;s){ &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(StreamReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;StreamReader(s)) &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(JsonTextReader&nbsp;jsonReader&nbsp;=&nbsp;new&nbsp;JsonTextReader(reader)) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonSerializer&nbsp;ser&nbsp;=&nbsp;new&nbsp;JsonSerializer(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ser.Deserialize<T>(jsonReader); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP