Как сериализировать TimeSpan к XML

Вы не должны пытаться рисовать / перекрашивать вещи до того, как рамка станет видимой.

Что вы можете сделать, это удалить содержимое конструктора GamePanel и поместить его в отдельный метод, например:

public void startThread() {

    Thread t = new Thread(this);
    t.start();
}

Затем запустить поток после того, как фрейм станет видимым: 116]

frame.setVisible(true);

gamePanel.startThread();

Еще лучше, избавьтесь от нити внутри панели и создайте ее в своей главной:

frame.setVisible(true);

new Thread(gamePanel).start();
200
задан John Saunders 28 April 2015 в 05:25
поделиться

3 ответа

Путем Вы уже отправили, является, вероятно, самым чистым. Если Вам не нравится дополнительное свойство, Вы могли бы реализовать IXmlSerializable, но тогда необходимо сделать все , который в основном побеждает точку. Я счастливо использовал бы подход, который Вы отправили; это (например), эффективно (никакой комплекс, анализирующий и т.д.), культура, независимая, однозначная, и числа типа метки времени, легко и обычно понимается.

Как в стороне, я часто добавляю:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]

Это просто скрывает его в UI и в ссылке dlls, для предотвращения беспорядка.

69
ответ дан Marc Gravell 23 November 2019 в 05:07
поделиться

Более читаемая опция состояла бы в том, чтобы сериализировать как строка и использовать TimeSpan.Parse метод для десериализации его. Вы могли сделать то же как в Вашем примере, но использовании TimeSpan.ToString() в методе get и TimeSpan.Parse(value) в методе set.

8
ответ дан Liam 23 November 2019 в 05:07
поделиться

Другой вариант - сериализовать его с использованием класса SoapFormatter , а не класса XmlSerializer .

Полученный XML-файл выглядит немного иначе ... некоторые теги с префиксом "SOAP" и т. д ... но он может это сделать.

Вот что SoapFormatter сериализовало период времени в 20 часов и 28 минут, сериализованный в:

<myTimeSpan>P0Y0M0DT20H28M0S</myTimeSpan>

Для использования SOAPFormatter, необходимо добавить ссылку на System.Runtime.Serialization.Formatters.Soap и использовать пространство имен с тем же именем.

2
ответ дан 23 November 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: