1. ホーム
  2. .net

[解決済み] Json.NETは、ストリームとの間でシリアライズ/デシリアライズができますか?

2022-04-21 09:37:04

質問

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

私のやり方が悪いのでしょうか?

解決方法は?

UPDATEしてください。 これは現在のバージョンでは動作しなくなりましたので、以下を参照してください。 以下 は正しい答えです ( 投票する必要はありません。 ).

を使用します。 JsonTextReader クラスで StreamReader を使用するか JsonSerializer オーバーロードは StreamReader を直接指定します。

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