Tag: 序列化

jackson杰森将一个对象反序列化为一个列表

我正在使用Spring的RestTemplate和使用Jackson反序列化来使用Web服务。 在我来自服务器的JSON响应中,其中一个字段可以是对象或列表。 意思是它可以是”result”: [{}]或”result”: {} 。 有没有办法通过对我反序列化的类型的注释来处理这类事情? 将成员定义为array[]或List并在第二个示例的情况下插入单个对象? 我可以编写一个新的HttpMessageConverter来处理它吗?

JSON使用google-gson序列化/反序列化generics类型

好吧,我必须承认我不擅长Java中的generics类型 我使用JavaScriptSerializer在C#中编写了一个JSON序列化/反序列化类 private static JavaScriptSerializer js = new JavaScriptSerializer(); public static T LoadFromJSONString(string strRequest) { return js.Deserialize(strRequest); } public static string DumpToJSONString(T rq) { return js.Serialize(rq); } 它在C#中运行良好。 现在我正在尝试转换或至少在Java中编写另一个JSON序列化/反序列化类。 我已经尝试过flexjson和google-gson,但我不知道如何在Java中指定。 有人可以帮帮我吗? 顺便说一句,我更喜欢google-gson

在java中,是否可以将Serializable接口添加到在运行时没有它的类?

有一个我想序列化的类,它实现了Serializable,但它包含的其中一个对象没有实现Serializable。 有没有办法在运行时修改类以使其实现Serializable接口,以便我可以序列化它? 我无法在编译时更改它,因为它是第三方库。 也许我不得不使用某种字节码编写器或其他东西? 编辑:包含类和包含类都在第三方库中,所以我不认为我可以标记为瞬态。 包含的类被标记为可序列化,但它包含的对象不是。 我为这个类编写自定义序列化方法很好,但不知道我会怎么做,我是否必须使用reflection来获取私有变量的值?

如何使用Jackson注释序列化此JSON?

我有以下JSON: { fields : { “foo” : “foovalue”, “bar” : “barvalue” } } 我写了一个pojo如下: public class MyPojo { @JsonProperty(“fields”) private List fields; static class Field { @JsonProperty(“foo”) private String foo; @JsonProperty(“bar”) private String bar; //Getters and setters for those 2 } 这显然失败了,因为我的json字段“fields”是一个hashmap,而不是一个列表。 我的问题是:是否有任何“魔术”注释可以使jackson将地图键识别为pojo属性名称,并将地图值分配给pojo属性值? PS:我真的不想把我的田野对象当作…… private Map fields; …因为在我的真实世界json中,我在地图值中有复杂的对象,而不仅仅是字符串…… 谢谢 ;-) 菲利普

Java序列化问题,同时使用guava Lists.transform

我不得不序列化一个复杂的对象,但它的一个组件是不可序列化的(第三方图形对象),所以我创建了这个Graph类的自定义可序列化版本,并使用Guava List转换将非可序列化对象转换为自定义对象。 序列化writeObject仍然失败。 我有兴趣知道为什么吗? 我的假设是Lists.transform执行Lazily操作(保持对原始对象的隐藏引用。) 还有一个解决这个问题的方法吗?

序列化的lambda和没有serialVersionUID?

我正在尝试学习序列化如何与Java及其最新版本一起工作。 我正在尝试序列化这样的lambda: Runnable r = (Runnable & Serializable)() -> {System.out.println(“This is a test”);}; 但我注意到我没有关于缺少serialVersionUID变量的警告。 这是正常的吗? 我知道它将在运行时生成,但强烈建议您定义它: https : //docs.oracle.com/javase/8/docs/api/java/io/Serializable.html 如果可序列化类未显式声明serialVersionUID,则序列化运行时将基于类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。 但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassExceptions。 因此,为了保证跨不同java编译器实现的一致serialVersionUID值,可序列化类必须声明显式serialVersionUID值。 强烈建议显式serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于立即声明的类 – serialVersionUID字段不适用于inheritance成员。 数组类不能声明显式的serialVersionUID,因此它们始终具有默认的计算值,但是对于数组类,不需要匹配serialVersionUID值。 我该怎么办 ? 如何在Lambda中定义它? 谢谢

可以在hbm.xml中映射的属性是暂时的吗?

假设我有一个像这样的User实体: class User { private String login; transient private String hashedPassword; } 我不想将hashedPassword转移到客户端,因此我将其设置为瞬态。 该类由Hibernate映射,两个字段都映射在hbm.xml中。 这种实施安全吗? Hibernate会在数据库中正确存储hashedPassword ,将其从数据库加载到对象中,将其保存在复制的二级缓存和本地会话缓存中吗? 顺便说一句,Hibernate或二级缓存是否以任何方式对transient进行处理或完全忽略它? 编辑 :我已经有两个答案似乎没有包括等式的一个特定方面。 我根本没有使用注释,只是在hbm.xml使用XML映射。 这个Java瞬态字段在hbm.xml OR映射。

Hadoop:没有可写接口的简单方法将对象作为输出值

我正在尝试利用hadoop来训练多个模型。 我的数据足够小以适应内存,所以我希望在每个地图任务中训练一个模型。 我的问题是,当我完成我的模型训练后,我需要将它发送到减速器。 我正在使用Weka来训练模型。 我不想开始研究如何在Weka类中实现Writable接口,因为它需要付出很多努力。 我正在寻找一种简单的方法来做到这一点。 Weka中的Classifier类实现了Serializable接口。 如何将此对象发送到reducer? edits 以下是提及weka对象序列化的链接: http ://weka.wikispaces.com/Serialization 以下是我的代码:配置作业(仅发布部分配置): conf.set(“io.serializations”,”org.apache.hadoop.io.serializer.JavaSerialization,” + “org.apache.hadoop.io.serializer.WritableSerialization”); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Classifier.class); 地图function: //load dataset in data variable Classifier tree=new J48(); tree.buildClassifier(); context.write(new Text(“whatever”), tree); 我的Map类扩展了Mapper(对象,文本,文本,分类器) 但我收到这个错误: java.lang.NullPointerException at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.(MapTask.java:964) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.(MapTask.java:673) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369) at org.apache.hadoop.mapred.Child$4.run(Child.java:259) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:416) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child.main(Child.java:253) […]

静态类变量和序列化/反序列化

从SCJP 6学习指南 – 有一个问题要求输出以下有关序列化的代码: import java.io.*; public class TestClass { static public void main(String[] args) { SpecialSerial s = new SpecialSerial(); try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(“myFile”)); os.writeObject(s); os.close(); System.out.print(++sz + ” “); s = null; // makes no difference whether this is here or not ObjectInputStream is = new ObjectInputStream(new FileInputStream(“myFile”)); SpecialSerial […]

如何解决java.io.InvalidClassException:本地类不兼容:stream classdesc serialVersionUID

我有一个类可序列化在一个如此大的项目编码而没有指定serialVersionUID,并保存在数据库MySQL作为blob! 我必须在这个类中添加一些字段,但在这之后,我得到一个这样的exception: IOException: error when reading object org.datanucleus.exceptions.NucleusUserException: IOException: error when reading object at org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:134) . . .. Caused by: java.io.InvalidClassException: local class incompatible: stream classdesc serialVersionUID = 1113799434508676095, local class serialVersionUID = -8504143738844344601 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560) 这是所有的stackTrace: IOException: error when reading object org.datanucleus.exceptions.NucleusUserException: IOException: error when reading object at org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:134) at org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObject(AbstractLargeB inaryRDBMSMapping.java:271) at org.datanucleus.store.mapped.mapping.SingleFieldMapping.getObject(SingleFieldMapping.java:21 […]