Android SimpleXml сериализация с дополнительными полями - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь интегрировать библиотеку SimpleXml в проект, над которым я работаю. Есть ли способ сериализации моделей в XML с некоторыми полями, необязательными. Не могу понять это из документации.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Я предпочитаю иметь пустой конструктор по умолчанию (или тот, который принимает только обязательные поля), а затем добавить установщики для необязательных свойств.Если вас беспокоит изменчивость, используйте шаблон Builder для создания объекта только с нужными полями.

С «частичным» объектом (т. Е. Объектом, для которого установлены только некоторые из его членов),Простая структура будет сериализовать только предоставленные поля в XML.

1 голос
/ 05 марта 2012

Вы должны использовать объектное представление определенных вами типов:

Двухместный -> Двухместный int -> Integer

Это позволяет вам определять их как нулевые, например:

@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;
    }
}

При просмотре документации обязательный = false больше для десериализации объекта, чем для сериализации объекта. Таким образом, вы можете использовать примитивные типы там, но для этого потребуется использовать ненулевое значение во время присваивания. После десериализации, если ваш xml не определяет широту, широте будет присвоено значение инициализации по умолчанию 0 вместо нуля. Просто зависит от того, какое поведение вы хотите.

Изменить:

Обязательно определите конструктор с помощью представлений Object:

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