使用Jackson ObjectMapper进行序列化

时间:2013-11-04 09:37:08

标签: java json jackson

我正在尝试使用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 个答案:

答案 0 :(得分:3)

默认可见性是使用所有公共getter方法和所有公共属性。如果你把这个搞定了:

public List<GProperty> getProperties()

它应该有用。

您也可以更改自动检测默认设置,但这里的功能过大。有关详细信息,请参阅http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.html

答案 1 :(得分:0)

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

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