2015-10-19 2 views
0

Я сохраняю данные с помощью сериализованного класса, теперь я хочу удалить зарегистрированный элемент, который больше не нужен, но старая версия уже была просеризована как файл, как я могу предотвратить исключение, когда новая версия десериализована из файла?Как правильно удалить сериализованное поле в C#?

Кстати, это C# используется в Unity3D, моно версии

[Serializable] 
public class UserModel { 
// old version 
    Dictionary<string,int> readyToRemoveDict; 
} 
[Serializable] 
public class UserModel { 
//new version 
    //Dictionary<string,int> readyToRemoveDict; 
} 

// В gameManager, вот как я спас его

public void SaveData() 
{ 
    BinaryFormatter bf = new BinaryFormatter(); 
    FileStream file = File.Create(Application.persistentDataPath + "/user.db"); 

    bf.Serialize(file,userModel);// this is the UserModel 
    file.Close(); 
} 

Я пытаюсь добавить [OptionalFiled] нет, но все-таки исключение

+1

«Я пытаюсь добавить [OptionalFiled], но до сих пор не исключение» Я думал, что это то, что вы хотели? Не бросать исключение, когда поле не задано. – HimBromBeere

ответ

0

Необходимо сохранить совместимость старого и нового кода. Тогда, пока вы будете делать десериализацию нового obiect, не было исключением.

Необходимо оставить все свойства этого класса, и это свойство, которое не используется, устанавливает атрибут как NonSerialized.

Когда вы получаете объект UserModel из файла, свойство readyToRemoveDict будет иметь нулевое значение.

Пример:

[Serializable] 
public class UserModel 
{ 
     // New version 
     [NonSerialized] 
     public Dictionary <string, int> readyToRemoveDict; 
} 
+0

Спасибо большое! Это очень полезно! –

Смежные вопросы