带有可选字段的Android SimpleXml序列化

时间:2012-03-05 16:37:12

标签: android xml-serialization

我正在尝试将SimpleXml库集成到我正在处理的项目中。有没有办法将模型序列化为XML,某些字段是可选的。无法从文档中弄明白。

2 个答案:

答案 0 :(得分:1)

您应该使用已定义类型的Object表示:

double - >双 int - >整数

这允许您将它们定义为null,如下所示:

@Root(name = "someWS")
public class GetSmth{
    @Element(name="Latitude", required=false)
    private Double latitude;

    @Element(name="Longtitude", required=false)
    private Double longtitude;

    @Element(name="PageNumber", required=false)
    private Integer pageNumber;

    @Element(name="PageSize", required=false)
    private Integer pageSize;

    @Element(name="CompanyDetailId")
    private Integer companyDetailId;


    public GetSmth(Double latitude, Double longtitude, Integer pageNumber,
                Integer pageSize, Integer companyDetailId) {
        this.latitude = latitude;
        this.longtitude = longtitude;
        this.pageNumber = pageNumber;
        this.pageSize = pageSize;
        this.companyDetailId = companyDetailId;
    }
}

查看documentation,required = false对象反序列化比对象序列化更多。因此,您可以在那里使用原始类型,但这样做会要求您在赋值期间使用非null值。在反序列化时,如果您的xml没有定义纬度,则纬度将被赋予默认初始值0而不是null。只取决于你想要的行为。

修改

确保使用Object representationations定义构造函数:

public GetSmth(Double latitude, Double longtitude, Integer pageNumber, 
    Integer pageSize, Integer companyDetailId)

答案 1 :(得分:1)

我更喜欢有一个空的默认构造函数(或者只包含必需字段的构造函数),然后为可选属性添加setter。如果您担心可变性,请使用Builder模式创建仅包含所需字段的对象。

使用“部分”对象(即只设置其部分成员的对象),Simple框架将仅将提供的字段序列化为XML。