【问题标题】:Scala: Serializing/deserializing a few elements of a classScala:序列化/反序列化类的一些元素
【发布时间】:2015-11-11 04:22:57
【问题描述】:

考虑以下玩具类:

class myGiantClass(){ 
    val serializableElement = ...  
    // lots of other variables and methods here 
}

// main program 
val listOfGiantObjects: List[myGiantClass] = .... 

我需要的是序列化/反序列化listOfGiantObjects。问题是myGiantClass 包含很多垃圾对象和变量,我不能/不能序列化/反序列化。相反,我想要序列化的myGiantClass 的唯一元素是listOfGiantObjects 的每个对象内的serializableElement。 所以在反序列化之后,listOfGiantObjects 预计会包含一堆 myGiantClass 对象,这些对象仅包含 serializableElement(其余设置为默认值)。

有什么想法吗?

【问题讨论】:

  • 为什么不定义像Iso这样的2路转换?
  • 另外,最好指定您使用的序列化方法。 pickle 例如至少可以引用picklingupicklepicopickle
  • @Odomontois Iso 是一个很好的建议(并且可能是一个答案)。我的脑海中没有任何具体的序列化。我会将其更改为“序列化”以保持通用性。

标签: scala serialization


【解决方案1】:

当然有两种方法(或默认):所有元素应该默认序列化,或者

在“全部”场景中,您可以查看 @transient 注释,用于标记不应序列化的字段。

如果有大量不应该序列化的元素,这似乎是一种不理想的方法。但是,它确实传达了您想要实现的目标。此外,您可以使用组合或内部类来安排代码,以更好地定义序列化范围。

最后,使用自定义属性的 ad-hoc 序列化是一种方法(例如,实现 none-by-default 场景)。

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2011-06-24
    • 2013-08-12
    • 2015-11-14
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2012-11-23
    相关资源
    最近更新 更多