反序列化时如何区分文件中已序列化的可为空数据的存在?

时间:2018-09-09 12:22:43

标签: c# .net serialization datacontractserializer

我正在使用DataContract Serializer进行序列化,并且在可空数据类型方面遇到了一些问题。

我刚刚将一个Custom类型的新DataMember属性添加到序列化的类中。

[DataMember]
public CustomObject NewProperty
{
   public get;
   public set;
}

现在的问题是,可以将此属性的值设置为null,并且它是该属性的有效值。保存和读取对象时没有问题。当我尝试提供所保存文件的向后兼容性时,就会出现问题。

如果我得到一个空值,则不确定该值是设置为null还是为null,因为它不存在正在读取的文件。只是如果读取的文件旧,我必须做不同的处理。

我已经通过结合OnDeserializing属性连接和为属性设置一些唯一值来实现上述行为,以供日后检查是否是由于读取旧文件而引起的。

类似这样的东西:

[OnDeserializing]
private void OnDeserializing(StreamingContext context)
{
   //this.NewProperty = some unique value;
}

private void ProcessData()
{
    if(this.NewProperty == unique value)
    {
        //Do something
    }
    else
    {
        //Do Something else
    }
}

但是,这似乎只是一种解决方法,并且我还需要注意不要从其他地方设置唯一值。我只想知道是否还有其他方法可以知道设置的空值是来自已保存的文件还是因为文件较旧且不包含该属性而被设置。

0 个答案:

没有答案