GSON 将布尔值序列化为 0 或 1

2024-01-07

All,

我正在尝试执行以下操作:

public class SomClass
{
    public boolean x;
    public int y;
    public String z;
}       

SomClass s = new SomClass();
s.x = true;
s.y = 10;
s.z = "ZZZ";
Gson gson = new Gson();
String retVal = gson.toJson(s);
return retVal;

所以这个小片段将产生:

{"x":true,"y":10,"z":"ZZZ"}

但我需要它来生产的是:

{"x":0, "y":10,"z":"ZZZ"}

有人可以给我一些选择吗?我不想将布尔值重写为整数,因为这会导致现有代码出现一些问题(不明显、难以阅读、难以执行等)


为了使其“正确”,你可以使用类似的东西

import java.lang.reflect.Type;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class BooleanSerializer implements JsonSerializer<Boolean>, JsonDeserializer<Boolean> {

    @Override
    public JsonElement serialize(Boolean arg0, Type arg1, JsonSerializationContext arg2) {
        return new JsonPrimitive(Boolean.TRUE.equals(arg0));
    }

    @Override
    public Boolean deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
        return arg0.getAsInt() == 1;
    }
}

然后使用它:

public class Main {

    public class Base {
        @Expose
        @SerializedName("class")
        protected String clazz = getClass().getSimpleName();
        protected String control = "ctrl";
    }

    public class Child extends Base {
        protected String text = "This is text";
        protected Boolean boolTest = false;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Main m = new Main();
        GsonBuilder b = new GsonBuilder();
        BooleanSerializer serializer = new BooleanSerializer();
        b.registerTypeAdapter(Boolean.class, serializer);
        b.registerTypeAdapter(boolean.class, serializer);
        Gson gson = b.create();

        Child c = m.new Child();
        System.out.println(gson.toJson(c));
        String testStr = "{\"text\":\"This is text\",\"boolTest\":1,\"class\":\"Child\",\"control\":\"ctrl\"}";
        Child cc = gson.fromJson(testStr, Main.Child.class);
        System.out.println(gson.toJson(cc));
    }
}

希望这对某人有帮助:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GSON 将布尔值序列化为 0 或 1 的相关文章

随机推荐

  • amcharts 中动态图表容器宽度和高度

    我正在使用 amcharts 我想要图表容器的宽度和高度动态取决于 amcharts 中 x 轴上没有列和 y 轴上的最高值 这是我的小提琴我使用css如下 graphsdata width 100 height 800px overflo
  • 网页中允许的最大 div 数

    您好 我想知道网页上允许的 div 数量是否有限制 例如 当 Internet Explorer 必须渲染具有一千个 div 的网页时 它会开始感到窒息吗 我知道这是一篇旧文章 但我最近做了一个与该主题直接相关的测试 我想分享我的结果 我创
  • Socket.io 在 Express Route 上发出

    我想在调用某些 API 路由时向客户端发送一些数据 我必须遵循 server js 上的代码 var app express var http require http Server app var io require socket io
  • 为什么此代码在到达 StreamReader 的第一个 ReadLine 时挂起?

    我在第一个参数中将一个大文件传递给下面的 SendXMLFile 但由于它导致手持设备 挂起 冻结 我暂时硬编码了一个小得多的文件 3 KB 而不是 1121 KB 供测试用 该文件确实存在 与 exe dll 位于同一文件夹中 如以下代码
  • Iframe 和同源策略以及反向代理黑客

    我一直在阅读具有不同域的 Iframe 然后是父文档 我有点困惑 据我了解 如果 iframe 与其父文档来自同一域 则父文档可以访问 iframe 的文档 看来我可以通过以下技巧来规避这个问题 我在以下位置设置了一个网络服务器mydoma
  • Android:处理ListView回收

    我正在开发一个音板应用程序 在其中使用 Listview Activity 但是由于Android的Listview具有回收其listview的属性 滚动列表视图时 我对所选文本视图所做的更改会反映在所有页面中 我不希望这种事发生 那么我该
  • J2ME 的 JSON 解析器

    我需要一个与 J2ME CLDC 1 1 配合使用的基本 JSON 解析器 Google 搜索返回了大量关于此问题的答案 有些甚至在 stackoverflow 上 但似乎所有内容都指向不再可用的库和解决方案 例如 很多都指向应该位于 js
  • 过滤负时间增量

    考虑一系列持有timedelta64 ns 测量两个事件 A 和 B 之间的时间差 gt time deltas 499900 1 days 23 45 13 499916 1 days 23 50 57 499917 00 03 27 4
  • VB 6:如何执行 .bat 文件但等到其运行完成后再继续?

    VB 6 如何执行 bat 文件但等到其运行完成后再继续 您将需要使用 Win32 API 调用Shell执行Ex http msdn microsoft com en us library bb762154 VS 85 aspx和从SHE
  • 如何处理自动模块中的拆分包?

    我目前正在测试将现有应用程序迁移到 Jigsaw Modules 我的模块之一使用 ElasticSearch 及其 Groovy 插件 org elasticsearch elasticsearch org elasticsearch m
  • boost::spirit 替代解析器返回重复项

    我正在研究https github com F Bergemann RegexSplitter https github com F Bergemann RegexSplitter 目的 解析正则表达式字符串 并创建可破坏和不可破坏的顶级子
  • 将整数数组转换为字符串的最佳方法是什么?

    我想转换一个 int 数组 像这样 1 1 2 1 转换为字符串 1121 最好的 最Pythonic的 方法是什么 我总是可以这样做 然后删除多余的括号 gt gt gt str 1 2 1 1 1 2 1 1 或者我可以这样做 s fo
  • Oracle 数据库变更通知

    我是 DCN 新手 我可以使用它来检测表中列的更新以及该表中的插入吗 我指的是this https docs oracle com cd E11882 01 java 112 e16548 dbchgnf htm JJDBC28815 是的
  • 如何修复div高度

    我正在开发一个聊天控制应用程序 我的问题是这样的 我输入文本 这用于拨打休息电话 获取响应并将其添加到聊天窗口 目前我的问题是这样的 聊天窗口变大 页面随着聊天框 div 一起滚动 有人可以告诉我如何停止整个页面的这种增量吗 简单来说 我的
  • 如何停止R中的for循环并保留数据

    我的代码在日期的 for 循环中运行 该代码需要一段时间才能运行 还剩几天时间 但我迫切需要任何结果 有没有办法打破代码 for 循环 但保留到目前为止已生成的所有数据 是的 您可以按 escape 检查结果 然后重新启动循环 for ii
  • 扩展协议,其中 Self:Swift 中的通用类型(需要 <...> 中的参数)

    我有一个需要泛型的类class Collection
  • 如何将 csv 字符串转换为 pandas 中的列表?

    我正在使用具有以下格式的 csv 文件 Id Sequence 3 1 3 13 87 1053 28576 2141733 508147108 402135275365 1073376057490373 97003854893559701
  • Jquery - 使用 .load 和选择器加载页面不会执行脚本?

    我正在尝试使用 load 方法将一个页面加载到另一页面中 此加载的页面包含一个我想在加载完成后执行的脚本 我整理了一个简单的示例来演示 索引 html
  • MVC:存储库和服务

    我对存储库中定义的内容以及留给服务的内容的限制感到困惑 存储库应该只创建与数据库中的表匹配的简单实体 还是可以使用这些实体的组合创建复杂的自定义对象 换句话说 服务是否应该在存储库上进行各种 Linq to SQL 查询 或者所有的查询都应
  • GSON 将布尔值序列化为 0 或 1

    All 我正在尝试执行以下操作 public class SomClass public boolean x public int y public String z SomClass s new SomClass s x true s y