我们的客户端/服务器应用使用NetDataContractSerializer
序列化任意Serializable
个对象。
BinaryFormatter
的输出会稍微小些,性能however实际上不是better。
现在可以使用更小的表示形式(例如XmlSerializer
和DataContractSerializer
,Json,Protocol Buffers,Thrift等的输出),这也恰好可以更快地序列化和反序列化。
但是,为了使用那些我必须访问Serializable
类中的每一个并添加属性并可能更改字段的访问级别等。这些类不仅分布在许多不同的内部项目,但我们的客户有自己的dll Serializable
类,必须修改。换句话说,是一项重大事业。
Serializable
个对象可能有其他性能改进,可能的缩小尺寸(除了gzipping等)吗?
答案 0 :(得分:0)
其中许多序列化程序不需要自定义属性 - 实际上有些是专门用于识别和使用SerializableAttribute
的。例如,见:
SerializableAttribute
DataContractAttribute
(更准确地定义了您在线协议中所需的特性)。你当然可以在运行时配置protobuf-net来做你想做的事。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来进行类型实例化。我正在使用this article中描述的自定义JsonConverter
。
答案 1 :(得分:0)
在查看Lars Kemmann的建议后得出的结论: NetDataContractSerializer
/ BinaryFormatter
除了以相同方式序列化和反序列化之外别无选择。 < / p>
我和Json.NET
一起玩,它有点有用,但通常情况下,魔鬼在细节中(另请参阅我对Lars&#39;回答的评论):
使用现实生活中的对象进行测试结果表明,我的反序列化对象与原始对象不完全相同,源于超级类中未被序列化的字段。至少这是粗略检查后的情况。
Protobuf-net
也不是一个选项,因为你