具有自定义类型的对象的 C# 序列化做法

本文关键字:序列化 对象 自定义 类型 | 更新日期: 2023-09-27 18:35:00

>我创建了一些自定义类型,例如:

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

考虑到MassTemperature将来可能会略有变化(例如,将Kelvin添加到Temperature(,在这种情况下序列化Planet的最佳实践是什么?我应该Mass并从类似 IQuantity 的自定义界面继承Temperature.

具有自定义类型的对象的 C# 序列化做法

请参阅@Adriano的评论。这就是我需要的。

是的,您可以根据需要添加任意数量的公共属性。为了进行比较,请看SO上的这篇文章:XmlSerializer和BinaryFormatter之间有什么区别。

二进制序列化对向类型添加和删除属性非常挑剔。如果您使用版本容忍序列化程序(例如基于 xml 的序列化程序(,您将能够在类的版本之间可靠地序列化/反序列化。

您可能需要考虑使用 protobuf.Net 进行序列化 - 它是成熟的、非常非常快的和版本容错的。