1000 個の文字列またはオブジェクトのリストがあり、それをファイルにシリアル化し、次回はそのうちの 1 つを更新して再度シリアル化したいとします。
現在のシナリオ: 1000 アイテムをシリアル化します。それらすべてを逆シリアル化し、要素の 1 つを更新してから、1000 個の要素すべてを再度シリアル化します。たった1つの要素を更新するためにすべてのアイテムを保存/ロードする必要がないというのは、これを行うためのより良い方法ですか?
アップデート
すべてのデータは、list のインスタンス itemTosave にあります。以下のクラスで itemTosave をシリアル化します。
[System.Serializable]
internal sealed class SaveAndLoadContainer : ISerializable {
private List<SaveAndLoadItem> loadedItems;
public static SaveAndLoadContainer Instance_Save;
public static SaveAndLoadContainer Instance_Load;
private List<SaveAndLoadItem> loadedItems;
public List<SaveAndLoadItem> LoadedItems {
get {
return this.loadedItems;
}
}
public SaveAndLoadContainer(){
Instance_Save = this;
}
private SaveAndLoadContainer(SerializationInfo info, StreamingContext contex){
loadedItems = (List<SaveAndLoadItem>)info.GetValue("UnsavedItems", typeof(List<SaveAndLoadItem>));
SaveAndLoadManager.ItemsToSave.Clear();
SaveAndLoadManager.ItemsToSave.TrimExcess();)
SaveAndLoadManager.ItemsToSave.AddRange(loadedItems);
}
public void GetObjectData (SerializationInfo info, StreamingContext context){
List<SaveAndLoadItem> unsavedItems = SaveAndLoadManager.ItemsToSave;
info.AddValue("UnsavedItems", unsavedItems, typeof(List<SaveAndLoadItem>));
}
}
SaveAndLoadItem クラスは次のとおりです。
[System.Serializable]
internal sealed class SaveAndLoadItem {
public SaveAndLoadItem(){
UniqueName = "--Nothing--";
Value = null;
ValueType = null;
IsClient = false;
}
public SaveAndLoadItem(string uniqueName, object value,Type typeOfValue,bool isClient){
UniqueName = uniqueName;
Value = value;
ValueType = typeOfValue;
IsClient = isClient;
}
public string UniqueName;
public System.Object Value;
public Type ValueType;
public bool IsClient;
}