有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Jackson ObjectMapper进行java序列化

我正在尝试使用Jackson库和以下代码序列化下面的GAccount对象ArrayList:

List<Gaccount> gAccounts;
ObjectMapper mapper=new ObjectMapper();
json=mapper.writeValueAsString(gAccounts);

然而,我注意到只有Id和Name字段被序列化,而不是属性。对不起,我是新来杰克逊图书馆的。我必须手动序列化该字段吗

package in.co.madhur.ganalyticsdashclock;

import java.util.ArrayList;
import java.util.List;

public class GAccount
{
    private String Id;
    private String Name;
    private List<GProperty> properties=new ArrayList<GProperty>();

    public GAccount(String Id, String Name)
    {
        this.Id=Id;
        this.Name=Name;
    }

    public String getName()
    {
        return Name;
    }
    public void setName(String name)
    {
        Name = name;
    }
    public String getId()
    {
        return Id;
    }
    public void setId(String id)
    {
        Id = id;
    }

    List<GProperty> getProperties()
    {
        return properties;
    }

    void setProperties(List<GProperty> properties)
    {
        this.properties = properties;
    }

    @Override
    public String toString()
    {
        return Name;
    }

}

共 (2) 个答案

  1. # 1 楼答案

    我正在使用jackson 2.9.0。默认可见性对所有成员来说总是“false”。在这种情况下,我们总是需要使用不同的可见性,否则结果json字符串将为空。下面是从JsonAutoDetect中提取的代码

    public boolean isVisible(Member m) {
                switch(this) {
                case ANY:
                    return true;
                ...
                case PUBLIC_ONLY:
                    return Modifier.isPublic(m.getModifiers());
                default:
                    return false;
                }
            }
  2. # 2 楼答案

    默认可见性是使用所有公共getter方法和所有公共属性。如果你让getter做到这一点:

    public List<GProperty> getProperties()
    

    应该行得通

    您也可以更改自动检测默认值,但这太过分了。有关更多信息,请参见http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.html