Java 无内部类的Json反序列化

Java 无内部类的Json反序列化,java,json,serialization,inner-classes,jackson,Java,Json,Serialization,Inner Classes,Jackson,我有一个关于使用Jackson进行Json反序列化的问题。 我想使用如下类反序列化Json文件: (摘自) Json文件可以通过以下方式使用所谓的“完整数据绑定”进行反序列化: ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(new File("user.json"), User.class); 我的问题是内部类“Name”的用法。我想在不使用内部类的情况下做同样的事情。“用户”类将变成这样: imp

我有一个关于使用Jackson进行Json反序列化的问题。 我想使用如下类反序列化Json文件: (摘自)

Json文件可以通过以下方式使用所谓的“完整数据绑定”进行反序列化:

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("user.json"), User.class);
我的问题是内部类“Name”的用法。我想在不使用内部类的情况下做同样的事情。“用户”类将变成这样:

import Name;
import Gender;
public class User 
{
    private Gender _gender;
    private Name _name;
    private boolean _isVerified;
    private byte[] _userImage;
    public Name getName() { return _name; }
    public boolean isVerified() { return _isVerified; }
    public Gender getGender() { return _gender; }
    public byte[] getUserImage() { return _userImage; }
    public void setName(Name n) { _name = n; }
    public void setVerified(boolean b) { _isVerified = b; }
    public void setGender(Gender g) { _gender = g; }
    public void setUserImage(byte[] b) { _userImage = b; }
}
这意味着找到一种方法,向映射器指定所有必需的类,以便执行反序列化

这可能吗?我查看了文档,但找不到任何解决方案

我的需求来自这样一个事实:我使用Javassist库来创建这样的类,它不支持内部类或匿名类


提前感谢您

静态内部类
名称
与同名的顶级类之间应该没有区别。Jackson运行时不应该能够有意义地区分这两种情况

您是否尝试过将
名称
类移出
用户
,将其更改为顶级类?它应该仍然像以前一样工作


编辑:我刚刚尝试过这个,当Name是顶级类时,它可以正常工作。我猜想,为了简洁起见,这个例子将它作为一个内部类。

斯卡夫曼先生的答案是正确的。唯一需要提及的是,与JAXB不同,Jackson通常不要求您指定要操作的类,除了根类(如果您使用根类,也不总是这样)。

@Eto:upvote和勾选答案是传统的感谢方法:)JAXB也不需要-您只需要指定根元素,加上那些只有多态关联才能到达的。
import Name;
import Gender;
public class User 
{
    private Gender _gender;
    private Name _name;
    private boolean _isVerified;
    private byte[] _userImage;
    public Name getName() { return _name; }
    public boolean isVerified() { return _isVerified; }
    public Gender getGender() { return _gender; }
    public byte[] getUserImage() { return _userImage; }
    public void setName(Name n) { _name = n; }
    public void setVerified(boolean b) { _isVerified = b; }
    public void setGender(Gender g) { _gender = g; }
    public void setUserImage(byte[] b) { _userImage = b; }
}