1

我正在尝试使用 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;
    }

}
4

2 回答 2

3

默认可见性是使用所有公共 getter 方法 和所有公共属性。如果你做这个吸气剂:

public List<GProperty> getProperties()

它应该工作。

您还可以更改自动检测默认值,但这在这里有点过分了。有关详细信息,请参阅http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.html

于 2013-11-04T09:42:15.600 回答
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;
            }
        }

于 2019-01-03T21:10:46.813 回答