Tag: 反序列化

使用gson将json字段反序列化为纯字符串

我试图将json对象反序列化为java bean。 我面临的主要问题是,我想将json字符串的字段object视为普通字符串,即使它包含一个可能正确的json对象。 json结构是这样的: { “type”:”user”, “object”:{ “id”:”1″, …} } 我如何告诉gson忽略object值,以便它不会反序列化为对象? 我希望它只被映射到我的bean中的一个普通的String字段,以便我可以为它配置一个正确的反序列化,一旦我从type字段中获得了类型。

Jackson – 如何为接口引用的反序列化指定单个实现?

我想用Jackson反序列化JSON-Object。 因为目标是一个接口,我需要指定应该使用哪个实现。 可以使用@JsonTypeInfo-Annotation将此信息存储在JSON-Object中。 但是我想在源代码中指定实现,因为它始终是相同的。 这可能吗?

反序列化后Hashmap变慢 – 为什么?

我有一个非常大的Hashmap(~250MB)。 创建它大约需要50-55秒,所以我决定将其序列化并将其保存到文件中。 从文件中读取大约需要16-17秒。 唯一的问题是查找似乎这样慢。 我一直认为hashmap是从文件读入内存的,所以与我自己创建hashmap的情况相比,性能应该是相同的,对吧? 这是我用来将hashmap读入文件的代码: File file = new File(“omaha.ser”); FileInputStream f = new FileInputStream(file); ObjectInputStream s = new ObjectInputStream(new BufferedInputStream(f)); omahaMap = (HashMap) s.readObject(); s.close(); 当我自己创建hashmap时,3亿次查找大约需要3.1秒,当我从文件中读取相同的hashmap时大约需要8.5秒。 有人知道为什么吗? 我忽略了一些明显的东西吗 编辑: 我通过使用System.nanotime()获取时间来“测量”时间,因此没有使用适当的基准测试方法。 这是代码: public class HandEvaluationTest { public static void Test() { HandEvaluation.populate5Card(); HandEvaluation.populate9CardOmaha(); Card[] player1cards = {new Card(“4s”), new Card(“2s”), new Card(“8h”), new Card(“4d”)}; […]

GSON和InstanceCreator问题

我有以下POJO: public interface Shape { public double calcArea(); public double calcPerimeter(); } public class Rectangle implement Shape { // Various properties of a rectangle } public class Circle implements Shape { // Various properties of a circle } public class ShapeHolder { private List shapes; // other stuff } 我没有问题让GSON将ShapeHolder的一个实例序列化为JSON。 但是当我尝试将该JSON的String反序列化为ShapeHolder实例时,我收到错误: String shapeHolderAsStr = getString(); […]

readResolve无法正常工作? :出现了一个Guava的SerializedForm实例

在我们的一个数据结构的反序列化过程中(使用默认机制(没有自定义writeObject / readObject)),会出现一个ImmutableMap $ SerializedForm实例(来自google的Guava库)。 这样的实例不应该从guava的客户端看到,因为SerializedForm的实例被替换为readResolve(参见com.google.common.collect.Immutable类中的“writeReplace”)。 因此,反序列化失败,并显示以下消息: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableMap$SerializedForm to field .. of type java.util.Map in instance of com.blah.C 这是正确的,因为ImmutableMap $ SerializedForm不是java.util.Map的子类型,但它应该被替换。 出了什么问题? 我们在com.blah.C类中没有自定义的writeObject / readObject。 我们在父对象(包含com.blah.C)中有自定义序列化代码。 更新,这是堆栈跟踪的顶部: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableSet$SerializedForm to field com.blah.ast.Automaton.bodyNodes of type java.util.Set in instance of com.blah.ast.Automaton at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2039) at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1952) at […]

使用Jackson XmlMapper对POJO进行XML反序列化

使用Jackson XmlMapper注释,如何将此XML反序列化为pojo? Username1 abcplaudzrbcy37c 0cxDE3LE0000= Username1 123plaudzrbcy37c 0cxDE3LE1234= Username1 000plaudzrbcy37c 0cxDE3LEabcd= 我试图使用这样的东西: @JacksonXmlRootElement(localName = “Open”) public class OpenCredentials { @JacksonXmlProperty(localName = “Credentials”) private Credentials[] credentials; } class Credentials { @JacksonXmlProperty(isAttribute = true) private String priv; @JacksonXmlProperty(isAttribute = true) private String type; @JacksonXmlProperty(localName = “Creds”) private Creds[] creds; } class Creds { @JacksonXmlText(value = true) private […]

使用jackson xml mapper将xml反序列化为pojo

我正在使用Jackson XML映射器将XML反序列化为POJO。 XML看起来像 111-111-1111 而我的class级看起来像 class Person { @JacksonXmlProperty(localName=”agency”, namespace=”namespace”) private Agency agency; //getter and setter } class Agency { @JacksonXmlElementWrapper(useWrapping = false) @JacksonXmlProperty(localName=”phone”, namespace=”namespace”) private List phones; //getter and setter } class AgencyPhone { private Phone phone; //getter and setter } class Phone { private String number; //getter and setter } 我想在Phone类中将电话号码设置为号码。 我无法更改XML或类的结构方式。 我收到无法构造resolve.agency.AgencyPhone错误的实例,我创建了一个AgencyPhone构造函数 […]

直接自引用导致循环exception

我有类似这样的课 public abstract class ElasticSearchValue { private Long txId; private Long currentTxId; private T previous; public Long getTxId() { return txId; } public void setTxId(Long txId) { this.txId = txId; } public Long getCurrentTxId() { return currentTxId; } public void setCurrentTxId(Long currentTxId) { this.currentTxId = currentTxId; } public Object getPrevious() { return previous; } public […]

如何使用Gson处理具有相同属性名称的不同数据类型?

我目前正在使用Gson在Java中编写RSS提要解析器。 我正在将RSS’XML转换为JSON,然后使用Gson将JSON反序列化为Java POJO(有点迂回,但有一个原因)。 对于下面列出的Feed#1( BBC )进行反序列化,一切都运行正常,但对于下面列出的Feed#2( NPR ),我开始抛出exception。 我想我已经确定了问题,但我不确定如何解决它: 问题出现在这两个RSS源(例如): http://feeds.bbci.co.uk/news/rss.xml http://www.npr.org/rss/rss.php?id=1001 对于这些不同的RSS源,称为“guid”的字段作为a)具有2个字段的对象 (如在BBC RSS Feed中)或b) 字符串 (如在NPR RSS Feed中)返回。 以下是相关JSON的一些释义版本: BBC RSS Feed // is returning ‘guid’ as an object “item” : [ { // omitted other fields for brevity “guid” : { “isPermalink” : false, “content” : “http:\/\/www.bbc.co.uk\/news\/uk-england-33745057” }, }, { // … […]

jackson反序列化的类型与不同的对象

我有一个Web服务的结果,它返回一个布尔值或一个单例映射,例如 布尔结果: { id: 24428, rated: false } 地图结果: { id: 78, rated: { value: 10 } } 我个人可以轻松地映射这两个,但我如何一般地做到这一点? 基本上我想把它映射到类,如: public class Rating { private int id; private int rated; … public void setRated(?) { // if value == false, set rated = -1; // else decode “value” as rated } } 所有的多态实例都使用@JsonTypeInfo来根据数据中的属性进行映射,但在这种情况下我没有这个选项。 编辑 更新的代码部分: […]