Tag: 序列化

Jackson – 自定义序列化程序,仅覆盖特定字段

我知道如何在Jackson中使用自定义序列化程序(通过扩展JsonSerializer ),但我希望默认的序列化程序适用于所有字段,除了1个字段,我想使用自定义序列化程序覆盖它。 注释不是一个选项,因为我正在序列化生成的类(来自Thrift)。 在编写自定义jackson序列化程序时,如何仅指定要覆盖的某些字段? 更新: 这是我要序列化的类: class Student { int age; String firstName; String lastName; double average; int numSubjects // .. more such properties … } 上面的类有很多特性,大多数都使用本机类型。 我想覆盖自定义序列化程序中的一些属性,让Jackson像往常一样处理其余的属性。 例如,我只想将“年龄”字段转换为自定义输出。

显式serialVersionUID被认为有害吗?

我可能会冒这个问题冒险。 在我看来,为新类明确指定serialVersionUID是不好的。 考虑两种情况,即在布局应该更改时不更改它,并在不应该更改时更改它。 几乎只有在明确的情况下才会发生变化。 在这种情况下,它会导致一些非常微妙,难以发现的错误。 特别是在开发过程中,类布局经常变化。 但是如果它没有明确指定,它将会改变并且反序列化将大声破坏,最有可能通过清除存储库来解决。 不应该发生的情况几乎只有在隐含时才会发生。 这是一种罕见的情况,其中类布局已更改但我们仍希望从旧的序列化blob反序列化。 这可能会在QA期间被捕获( 从5.2升级到5.2.1之后的奇怪错误,请参阅附加的堆栈跟踪 ),并且可以通过设置显式值来轻松修复。 注释?

Java序列化,UID没有改变。 我可以在课程中添加新的变量和方法吗?

我有一个序列化的类。 现在我需要使用setter和getter方法在类中添加一个新变量。 此类在RMI中通过线路发送。 在不更改UID的情况下,我可以为它添加新参数和getter以及setter方法吗? 我尝试编写一个通过线程发送的示例类,并没有更改UID,并为其添加了新参数和getter以及setter方法。 另一方面,我测试了它,我仍然得到了正确的值。 我曾假设,如果我添加新参数,getter和setter方法,我需要更改UID。 我错了吗?

GSON – 特定情况下的自定义序列化程序

我有这个架构: public class Student { public String name; public School school; } public class School { public int id; public String name; } public class Data { public ArrayList students; public ArrayList schools; } 我想用Gson序列化Data对象,得到类似的东西: { “students”: [{ “name”:”name1″, “school”: “1” //the id of the scool, not its entire Json }], “school”: [{ //the entire […]

Java到XML的转换?

有什么不同的方法将Java Objects转换为XML ,我知道一个选项是JAXB但是想知道同样可用的其他approaches/tools是什么? 注意:我没有进一步的要求,因此我无法在问题中添加更多内容,但是在这个时候,如果我能够了解将Java to XML转换Java to XML有哪些不同的方法,那将会非常棒? 更新:不同的建议方法是: javax.xml.bind.Marshaller和javax.xml.bind.Unmarshaller XStream的 的XMLBean JAXB 蓖麻 JIBX Apache Digester 现在,在所有建议的方法中,将Java Objects to XML转换Java Objects to XML和XML to Java Objects的最佳方法是什么?

Java to Jackson JSON序列化:Money字段

目前我正在使用Jackson从我的基于Spring的Web应用程序发送JSON结果。 我遇到的问题是试图将所有货币字段输出为2位小数。 我无法使用setScale(2)解决此问题,因为25.50之类的数字被截断为25.5等 还有其他人处理过这个问题吗? 我正在考虑使用自定义的Jackson序列化程序创建Money类…您可以为字段变量创建自定义序列化程序吗? 你可能……但即使如此,我怎么能让我的客户序列化器将数字添加为2位小数的数字?

在java中,如何序列化未标记为Serializable的类?

我要序列化的第三方库中有一个特定的类。 我该怎么做呢? 我假设我必须编写一个方法来接受类的对象并使用reflection来获取私有成员值。 然后,为了反序列化,我会使用reflection来放回值。 这会有用吗? 有更容易的方法吗?

匿名类上的NotSerializableException

我有一个过滤项目的界面: public interface KeyValFilter extends Serializable{ public static final long serialVersionUID = 7069537470113689475L; public boolean acceptKey(String iKey, Iterable iValues); public boolean acceptValue(String iKey, String value); } 以及包含KeyValFilter类型成员的类。 public class KeyValFilterCollector extends KeyValCollectorSkeleton { /** * */ private static final long serialVersionUID = -3364382369044221888L; KeyValFilter filter; public KeyValFilterCollector(KeyValFilter filter){ this.filter=filter; } 当我尝试使用实现KeyValFilter的匿名类启动KeyValFilterCollector时: new KeyValFilterCollector(new KeyValFilter(){ private […]

强制JAX-RS将我的类序列化为JSON对象

我有一个类,它是一个内部列表的装饰器。 我想在我的JAX-RS服务中将此类用作DTO。 其代码如下: @XmlRootElement(name = “movies”) public class MoviesResponse implements List { @XmlElement(name = “movie”) protected List movies; /* tons of delegate methods */ } 我需要同时支持application / xml和application / json。 格式是固定的,它必须是 …在XML中,和 { “movie”: [ {},{} ] } …在JSON中。 XML工作得很好,但JSON看起来像这样: [{},{}] 您可能怀疑,如果我没有实现List接口,它会生成我需要的格式。 所以我猜序列化器是聪明的,并将其视为List,从而将其序列化为一个数组。 但是我需要将它序列化为一个对象。 我该怎么做,实现List接口?

java中的OpenCV Mat对象序列化

我试图序列化对的映射并获得如下exception: java.io.NotSerializableException: org.opencv.core.Mat 有什么方法可以序列化吗?