gpt4 book ai didi

android - GSON : Custom serialization for String

转载 作者:行者123 更新时间:2023-11-29 22:49:57 25 4
gpt4 key购买 nike

public class Data{
public String str; //String (that may contain line breaks) I need to serialize as it is.
}

为什么我需要为字符串自定义序列化程序?如果没有自定义序列化器,它会将其序列化为对象 {"str":{"count": 292,"hashCode": 0}

我需要它是 {"str":"................."}

如何使用自定义序列化器做到这一点?

有自定义类型的自定义序列化程序示例,但找不到任何有助于序列化字符串类型的内容。

最佳答案

好吧,Gson 支持开箱即用的字符串,您不必自己实现任何字符串序列化程序,反之亦然。我猜你的情况可能只是导入了错误的字符串类,比如 import foo.bar.baz.String; 或不太明显的 import foo.bar.baz.*,或者您只是在声明 Data 类的包中有一个 String 类实现。(这无法解释真正分配给 str 的值,但是,它永远不会在 Java 中工作,导致 ClassCastException)。错误的类可能会用数字 counthashCode 表示,而没有任何 char[] 声明的字段,所以我不认为这是一个java.lang.String 在你的情况下。此外,这里更假设的事情可能是使用反射将字符串类型适配器从 Gson 实例中丢弃,无论它听起来如何以及多么奇怪。在任何情况下,您都无需实现一行代码即可使用 Gson 序列化 Java 字符串。

关于已接受的答案:它不是最优的。如果无论出于何种原因,您的导入没有任何问题,您的包没有声明自定义 String 类,并且您的 Gson 实例不会受到反射手术的影响,但是Gson 仍然将此类字符串序列化为嵌套对象(不知道为什么会那样),您只需要一个特殊的 String 类型适配器,而无需为任何使用该怪异 的类创建类型适配器>String 作为一个字段:

final Gson gson = new GsonBuilder()
.registerTypeAdapter(/*real.package.here.*/String.class, (JsonSerializer</*real.package.here.*/String>) (s, type, context) -> new JsonPrimitive(s.toString())) // whatever the real Java string is obtained
.create();

关于android - GSON : Custom serialization for String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58057712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com