鸿蒙Next序列化serialized name如何使用

在鸿蒙Next开发中,如何使用@SerializedName注解来指定JSON字段的序列化名称?比如我有一个Java类属性名为userName,但JSON数据中对应的字段是user_name,该如何通过注解实现映射?能否提供一个具体的代码示例?

2 回复

鸿蒙Next中序列化字段名可通过@SerializedName注解修改JSON映射。具体用法:

  1. 基本用法:
public class User {
    @SerializedName("user_name")  // JSON字段映射为user_name
    private String userName;
}
  1. 多字段名支持(兼容不同API版本):
@SerializedName(value = "current_name", alternate = {"old_name", "nick_name"})
private String name;  // 优先取current_name,不存在时依次尝试alternate字段
  1. 配合JsonReader/JsonWriter使用:
// 序列化时自动使用注解名称
String json = JsonUtils.toJson(user);

// 反序列化时自动匹配注解字段
User user = JsonUtils.fromJson(json, User.class);

注意:需确保已引入鸿蒙序列化依赖,注解仅影响JSON字段名,不影响Java字段本身。

更多关于鸿蒙Next序列化serialized name如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,序列化时自定义字段名称可以通过 @SerializedName 注解实现,类似于其他框架(如Gson)。以下是具体使用方法:

1. 添加依赖

确保在 build-profile.jsondependencies 中引入序列化库(如 @ohos/serialization 或相关JSON库):

"dependencies": {
  "@ohos/serialization": "1.0.0"
}

2. 使用 @SerializedName 注解

在数据类的字段上添加注解,指定序列化时的名称:

import { SerializedName } from '@ohos/serialization';

class User {
  @SerializedName('user_name')
  userName: string;

  @SerializedName('age')
  userAge: number;

  constructor(name: string, age: number) {
    this.userName = name;
    this.userAge = age;
  }
}

3. 序列化与反序列化示例

import { Serialization } from '@ohos/serialization';

// 序列化对象到JSON字符串
const user = new User('张三', 25);
const jsonString = Serialization.serialize(user);
console.log(jsonString); // 输出: {"user_name":"张三","age":25}

// 反序列化JSON字符串到对象
const jsonObj = '{"user_name":"李四","age":30}';
const newUser = Serialization.deserialize(jsonObj, User);
console.log(newUser.userName); // 输出: 李四

注意事项:

  • 确保注解库支持 @SerializedName,具体名称可能因鸿蒙版本略有差异。
  • 序列化/反序列化时,字段会按注解的名称映射(如 userName 对应 user_name)。
  • 若未使用注解,默认直接使用字段名。

通过这种方式,可以灵活处理JSON键名与代码字段名不一致的情况。

回到顶部