private static AbstractPersistentData Deserialize(string filePath, string importedBuildPath)
        {
            var deserializer = new IPersistentDataDeserializer[]
            {
                new PersistentDataDeserializerUpTo230(), new PersistentDataDeserializerCurrent()
            };
            var xmlString = File.ReadAllText(filePath);
            var version   = SerializationUtils.XmlDeserializeString <XmlPersistentDataVersion>(xmlString).AppVersion;
            IPersistentDataDeserializer suitableDeserializer;

            if (version == null)
            {
                suitableDeserializer = deserializer.FirstOrDefault(c => c.MinimumDeserializableVersion == null);
            }
            else
            {
                var v = new Version(version);
                suitableDeserializer = deserializer.FirstOrDefault(c =>
                                                                   v.CompareTo(c.MinimumDeserializableVersion) >= 0 &&
                                                                   v.CompareTo(c.MaximumDeserializableVersion) <= 0);
            }
            if (suitableDeserializer == null)
            {
                throw new Exception(
                          $"No converter available that can deserialize a PersistentData file with version {version}");
            }
            var data = new PersistentData(suitableDeserializer, importedBuildPath);

            suitableDeserializer.DeserializePersistentDataFile(xmlString);
            return(data);
        }
 private static AbstractPersistentData Deserialize(string filePath, string importedBuildPath)
 {
     var deserializer = new IPersistentDataDeserializer[]
     {
         new PersistentDataDeserializerUpTo230(), new PersistentDataDeserializerCurrent()
     };
     var xmlString = File.ReadAllText(filePath);
     var version = SerializationUtils.XmlDeserializeString<XmlPersistentDataVersion>(xmlString).AppVersion;
     IPersistentDataDeserializer suitableDeserializer;
     if (version == null)
     {
         suitableDeserializer = deserializer.FirstOrDefault(c => c.MinimumDeserializableVersion == null);
     }
     else
     {
         var v = new Version(version);
         suitableDeserializer = deserializer.FirstOrDefault(c =>
             v.CompareTo(c.MinimumDeserializableVersion) >= 0
             && v.CompareTo(c.MaximumDeserializableVersion) <= 0);
     }
     if (suitableDeserializer == null)
     {
         throw new Exception(
             $"No converter available that can deserialize a PersistentData file with version {version}");
     }
     var data = new PersistentData(suitableDeserializer, importedBuildPath);
     suitableDeserializer.DeserializePersistentDataFile(xmlString);
     return data;
 }
 public PersistentData(IPersistentDataDeserializer deserializer, string importedBuildPath)
 {
     _deserializer = deserializer;
     _deserializer.PersistentData = this;
     _importedBuildPath           = importedBuildPath;
     _currentDeserializer         = deserializer as PersistentDataDeserializerCurrent ??
                                    new PersistentDataDeserializerCurrent {
         PersistentData = this
     };
 }
 public PersistentData(IPersistentDataDeserializer deserializer, string importedBuildPath)
 {
     _deserializer = deserializer;
     _deserializer.PersistentData = this;
     _importedBuildPath = importedBuildPath;
     _currentDeserializer = deserializer as PersistentDataDeserializerCurrent ??
                            new PersistentDataDeserializerCurrent {PersistentData = this};
 }