2

クライアント/サーバー アプリは、を使用しNetDataContractSerializerて任意Serializableのオブジェクトをシリアル化します。

の出力はBinaryFormatter多少小さくなりますが、パフォーマンスはそれほど良くありません。

より小さな表現が可能になり (例えばXmlSerializerand DataContractSerializer、Json、Protocol Buffers、Thrift などの出力)、シリアライズとデシリアライズがはるかに高速になります。

ただし、それらを使用するには、すべてのSerializableクラスに移動して属性を追加し、場合によってはフィールドのアクセス レベルを変更する必要があります。これらのクラスは多くの異なる内部プロジェクトに分散しているだけでなく、クライアントには独自のプロジェクトがあります。Serializable変更が必要なクラスを含むdll 。いわば一大事業。

オブジェクトで可能な他のパフォーマンスの向上と潜在的なサイズ削減 (gzip など以外) はありSerializableますか?

4

2 に答える 2

0

これらのシリアライザーの多くは、カスタム属性を必要としません。実際、いくつかは、SerializableAttribute. たとえば、次を参照してください。

Json.NET の例:

var settings = new JsonSerializerSettings
{ 
    TypeNameHandling = TypeNameHandling.All,
    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
};
string serialized = JsonConvert.SerializeObject(obj, settings);
var deserialized = JsonConvert.DeserializeObject(serialized, settings);

更新:型のインスタンス化を行うために Json.NET をフォークする必要はありません。この記事JsonConverterで説明されているカスタムを使用しています。

于 2014-08-13T04:50:47.203 に答える