小编典典

Json.NET 可以对流进行序列化/反序列化吗?

all

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

我做错了吗?


阅读 60

收藏
2022-08-05

共1个答案

小编典典

更新: 这在当前版本中不再有效,请参阅下面的正确答案(无需投票,这在旧版本上是正确的 )。

当前版本的 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

var serializer = new JsonSerializer();
serializer.Deserialize(streamReader);
2022-08-05