Práticas de serialização C# de objetos com tipos personalizados
-
12-12-2019 - |
Pergunta
Eu criei alguns tipos personalizados, por exemplo:
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
}
}
e um semelhante para Mass
, etc.
Eu também tenho um objeto personalizado, por exemplo Planet
, que usa esses tipos personalizados como propriedades.
[Serializable]
public class Planet
{
public int PositionFromSun;
public Mass Mass;
public Temperature Temperature;
}
Qual é a melhor prática para serializar Planet
neste caso considerando que Mass
e Temperature
pode mudar ligeiramente no futuro (por ex.adicionando Kelvin
para Temperature
)?Eu deveria ter Mass
e Temperature
herdando de uma interface personalizada de algo como IQuantity
.
Solução
Por favor, veja @Adriano's Comente.Isso é o que eu precisava.
Sim, você pode adicionar quantas propriedades públicas precisar.Para comparação, dê uma olhada neste post aqui no SO: Quais são as diferenças entre XmlSerializer e BinaryFormatter
Outras dicas
A serialização binária é bastante exigente quanto às propriedades adicionadas e removidas dos tipos.Se você usar um serializador tolerante à versão (por exemplo, serializadores baseados em xml), você poderá serializar/desserializar de maneira confiável entre versões de classes.
Você pode considerar usar protobuf.Net para sua serialização - é maduro, muito rápido e tolerante a versões.