Как пометить атрибут XML DateTime с помощью XmlDateTimeSerializationMode? - PullRequest
1 голос
/ 06 августа 2009

Можно ли как-нибудь определить, как DateTime должен быть сериализован / десериализован с использованием чего-то похожего на тег XmlAttribute? Раньше я делал поле строкой, а затем делал что-то подобное в конструкторе:

this.DateField = XmlConvert.ToString(passedObject.Date, XmlDateTimeSerializationMode.Utc);

Однако я бы хотел, чтобы поле было DateTime и каким-то образом помечало, что оно должно быть сериализовано как UTC:

[System.Xml.Serialization.XmlAttribute()] // XmlDateTimeSerializationMode tag here?
public DateTime DateField;

Как бы я это сделал?

Ответы [ 2 ]

1 голос
/ 06 августа 2009

Я не уверен, что вы можете сделать это с помощью атрибутов, поскольку вы пересекаете черту от сериализации ваших данных как есть, до преобразования их и затем сериализации.

Возможно, вы могли бы получить тот же результат, изменив способ представления данных, добавив свойство, защищенное UTC, то есть:

public DateTime DateField;

[System.Xml.Serialization.XmlAttribute("DateField")]
protected DateTime UtcDateField
{
    get
    {
        //Convert DateField to UTC
    }

    set
    {
        DateField = //Convert value from UTC
    }
}
0 голосов
/ 06 августа 2009

Другой вариант - наследовать интерфейс IXmlSerializable и обрабатывать все чтения и записи вашей сериализации вручную. Он не такой краткий или автоматический, как атрибуты, но даст вам необходимый контроль, и я думаю, что это легче понять, чем создавать специальные отформатированные поля только для процесса сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...