Практика сериализации C# объекта с настраиваемыми типами
-
12-12-2019 - |
Вопрос
Например, я создал несколько пользовательских типов:
public class Temperature
{
protected double _celcius;
public Temperature(){}
public Temperature(double celcius)
{
_celcius = celcius;
}
public double Celcius
{
//sets & returns temperature in Celcius
}
public double Fahrenheit
{
//sets & returns temperature in Fahrenheit
}
}
и аналогичный для Mass
, и т. д.
У меня также есть собственный объект, например Planet
, который использует эти пользовательские типы в качестве свойств.
[Serializable]
public class Planet
{
public int PositionFromSun;
public Mass Mass;
public Temperature Temperature;
}
Какова наилучшая практика сериализации Planet
в данном случае учитывая, что Mass
и Temperature
может немного измениться в будущем (например.добавление Kelvin
к Temperature
)?Должен ли я иметь Mass
и Temperature
наследование от пользовательского интерфейса чего-то вроде IQuantity
.
Решение
Пожалуйста, посмотрите @Adriano's комментарий.Это то, что мне нужно.
Да, вы можете добавить столько общедоступных свойств, сколько вам нужно.Для сравнения взгляните на этот пост здесь, на SO: Каковы различия между XmlSerializer и BinaryFormatter?
Другие советы
Двоичная сериализация довольно требовательна к добавлению и удалению свойств типов.Если вы используете сериализатор, устойчивый к версиям (например, сериализаторы на основе XML), вы сможете надежно сериализовать/десериализовать между версиями классов.
Возможно, вы захотите рассмотреть возможность использования protobuf.Net для вашей сериализации - она зрелая, очень быстрая и терпимая к версиям.