开发者社区> 问答> 正文

fastjson 2 2.0.3版本#枚举转JsontString默认取不到name,只能拿到序号

public class FastJsonTest {

private FastJsonEnum fastJsonEnum = FastJsonEnum.FAST_JSON_ENUM;

public static void main(String[] args) { FastJsonTest fastJsonTest = new FastJsonTest(); System.out.println(JSON.toJSONString(fastJsonTest)); }

enum FastJsonEnum { FAST_JSON_ENUM; }

问题:

fastjosn1输出{"fastJsonEnum":"FAST_JSON_ENUM"} falstjosn2输出{"fastJsonEnum":0}

是否默认移除了JSONWriter.Feature.WriteEnumUsingToString和JSONWriter.Feature.WriteEnumUsingName

原提问者GitHub用户hyuga0410

展开
收起
飘飘斯嘉丽 2023-04-21 12:03:27 621 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    根据代码和输出结果来看,fastjson 序列化枚举类型的行为确实有所变化。在 fastjosn1 中,枚举类型被序列化成了字符串形式,而在 fastjosn2 中,枚举类型被序列化成了整数形式。

    根据 fastjson 的文档,序列化枚举类型的方式可以通过设置 JSONWriter.Feature.WriteEnumUsingToString 和 JSONWriter.Feature.WriteEnumUsingName 来控制。默认情况下,fastjson 会将枚举类型序列化成整数形式,因此 fastjosn2 的输出结果是符合预期的。

    如果需要将枚举类型序列化成字符串形式,可以使用以下代码:

    JSON.toJSONString(fastJsonTest, SerializerFeature.WriteEnumUsingToString); 这样就能够得到和 fastjosn1 相同的输出结果了。

    2023-04-21 21:13:37
    赞同 展开评论 打赏
  • 是的,默认没有打开WriteEnumUsingName,可以显示打开,也可以通过JSON.config配置全局打开

    原回答者GitHub用户wenshao

    2023-04-21 14:50:29
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载