我決定用自己的Load方法創建一個SavableModelBase子類。此Load方法將首先讀取與保存該文件的類的名稱相同的文件的根節點。如果它們比較OK,則繼續使用父SavableModelBase類的Load方法加載。否則,拋出一個異常。 (我在這個時候忽略使用二進制模式加載。)
public class LexSavableModelBase<T> : SavableModelBase<T> where T : class
{
// SNIP!
public static new T Load(Stream stream, SerializationMode mode)
{
Argument.IsNotNull(() => stream);
if (mode == SerializationMode.Xml)
{
using (XmlReader xr = XmlReader.Create(stream))
{
xr.MoveToContent();
string rootName = xr.LocalName;
if (string.Compare(rootName, typeof(T).Name, StringComparison.OrdinalIgnoreCase) != 0)
{
throw new InvalidDataException(string.Format(CultureInfo.CurrentCulture, "Expecting data from Model [{0}], but found Model [{1}] instead.", typeof(T).Name, rootName));
}
// Reset to read from the top.
stream.Seek(0, SeekOrigin.Begin);
}
}
return SavableModelBase<T>.Load<T>(stream, mode);
}
}
我敢肯定,需要具有讀取文件的一部分兩倍的性能損失,我只是做得不夠,以滿足我一小組場景,但它似乎做我需要它 - 檢測何時加載錯誤的數據。我只在我的應用程序中使用了150+左右的約4種模型。這些是由客戶保存並加載到磁盤上的文件。
如果你可以做任何改進,請做。如果您有任何問題,請告訴我。
感謝您的回覆!我有一個想法可能會起作用。如果它確實存在(或者甚至沒有),我會在這裏回覆我所做的。 – RandyB