java - 如何将java对象序列化为field.path = field.value

标签 java serialization reflection

我有以下模型类:

package com.ab.model;

import java.util.List;

public class Request {

    public Request(String requestType, Body body, List<String> emails) {
        this.requestType = requestType;
        this.body =body;
        this.emails = emails;
    }

    private String requestType;
    private Body body;
    private List<String> emails;

    public String getRequestType() {
        return requestType;
    }

    public void setRequestType(String requestType) {
        this.requestType = requestType;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

    public List<String> getEmails() {
        return emails;
    }

    public void setEmails(List<String> emails) {
        this.emails = emails;
    }

}

class Body {

    private String content;
    private List<Header> headers;

    public Body(String content, List<Header> headers) {
        this.content = content;
        this.headers = headers;
    }

    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public List<Header> getHeaders() {
        return headers;
    }
    public void setHeaders(List<Header> headers) {
        this.headers = headers;
    }   

}

class Header {

    private String headerName;

    public Header (String headerName) {
        this.headerName = headerName;
    }

    public String getHeaderName() {
        return headerName;
    }

    public void setHeaderName(String headerName) {
        this.headerName = headerName;
    }

}

以及 Request 类的以下实例:

Request request = new Request(
                "get", 
                new Body("abcdefg", 
                        Arrays.asList(new Header("header_one"))), 
                Arrays.asList("a@a.com", "b@b.com"));

你知道有什么库或算法可以将请求对象序列化为以下字符串吗?

requestType = "get"
body.content = "abcdefg"
body.headers[0].headerName = "header_one"
emails[0] = "a@a.com"
emails[1] = "b@b.com"

我知道我可以将其序列化为 json、xml 等,但这些不适合我的用例。 基本上我需要一个序列化,例如: field.nestedField.reallyNestedField = "其原始值"

下一步,我计划读取生成的字符串并为每个字段/nestedField 生成任意数据,然后使用 Apache 的 PropertyUtils 将其反序列化,例如:

PropertyUtils.setProperty(requestObject, "requestType", "random type");
PropertyUtils.setProperty(requestObject, "body.content", "random content");
//...

非常感谢! 安德烈

最佳答案

重写toString()默认方法来读取成员变量并将其输出为文本怎么样?您可以使用 super 来引用您的 SuperClass 及其成员。

PS:您的类中没有默认构造函数!如果您的构造函数带有参数列表,建议您在类中包含无参数默认构造函数!特别是如果您正在实现一些与序列化/反序列化相关的逻辑!

关于java - 如何将java对象序列化为field.path = field.value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537683/

相关文章:

C# - 获取 A 类中使用的所有类型

java - 如何使用 Spring Boot 配置 logback-access.xml

java - 年轻一代的垃圾收集器

C# 类型比较

c# - 如何使用反射获取私有(private)字段的值?

c - 在 C 中序列化一个简单的结构

java - 计算机代数系统的 GUI

java - 如何在@SpringBootTest 之前添加设置并且只运行一次?

c# - 可以将属性添加到我的类的 JSON 版本,而类中不存在它吗?

php - 避免 php serialize() 中的空字节