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