如何将属性序列化为 json 对象?

Posted

技术标签:

【中文标题】如何将属性序列化为 json 对象?【英文标题】:How can I serialize properties as json object? 【发布时间】:2019-03-21 08:44:49 【问题描述】:

如何使用 jackson 序列化以下通用响应?

public class GenericResponse
    private String resource;
    private Integer status;
    private ErrorInfo response;
    //setters and getters


public class ErrorInfo 
    private String errorCode;
    private String errorDetails;
    @JsonUnwrapped
    private ErrorFactory errorFactory;
    //setters and getters

预期输出:


    "resource": "xxxxxx",
    "status": xxxxx,
    "response": 
        "error-info": 
            "errorCode": "xxxxxx",
            "errorDetails": "xxxxx"
            
    

我怎样才能用杰克逊得到这个???

如果我将 wrap_root_value 设置为 true,那么它将以以下格式序列化....


    "GenericResponse": 
        "resource": "xxxxxx",
        "status": xxxxxxxxx,
        "response": 
            "errorCode": "xxxxxxxxx",
            "errorDetails": "xxxxxxxxxxx"
        
    

【问题讨论】:

你提到它会在 wrap_root_value 为真时执行此操作,如果为假会发生什么情况? 您的预期输出是无效的 JSON。为什么需要这种形式? @Zergled 默认情况下该属性为假。 “资源”:“xxxxxx”,“状态”:xxxxx,“响应”:“errorCode”:“xxxxxx”,“errorDetails”:“xxxxx” @Selindek Soory 这是一个错字 【参考方案1】:

我可以通过使用 @JsonTypeInfo@JsonTypeName 注释来获得此信息。

public class GenericResponse
private String resource;
private Integer status;
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
private ErrorInfo response;
//setters and getters


@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeName("error-info")
public class ErrorInfo 
private String errorCode;
private String errorDetails;
@JsonUnwrapped
private ErrorFactory errorFactory;

【讨论】:

以上是关于如何将属性序列化为 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有子属性的 JSON 反序列化为 C# 中的 ONE 对象

将 JSON 命名属性反序列化为 .Net 对象

如何覆盖属性的 JSON 序列化,将值序列化为字符串而不是对象?

有没有办法将对象序列化为 JSON 但只包含一些属性?

JSON.NET 将对象 序列化为 JSON字符串时,能否指定,某个属性不被转化。

序列化为 JSON 字符串时如何修复 OutOfMemoryException?