DataContract
和DataMember
屬性也可以用於通過使用DataContractSerializer
將對象序列化到文件和用於反序列化。假設我們有一個具有以下私有字段和公共屬性的類。是否應用DataMember屬性在屬性中引發異常的良好做法?
public class MyClass
{
private int positiveValue;
public int PositiveValue
{
get { return positiveValue; }
set
{
if (value < 1)
throw new ArgumentOutOfBoundException(...);
positiveValue = value;
}
}
}
現在假設我們有一個包含預先序列化對象的狀態的XML文件,並假定用戶已修改該文件,指定一個不正確的值(即非正值)爲PositiveValue
屬性。在反序列化過程中,將拋出異常,因爲文件中的值是無效的。
假設我們想從一個文件反序列化MyClass
對象的列表:如果某個對象無效,則拋出異常。是否有可能確保DataContractSerializer
忽略無效對象?此外,考慮到剛剛解釋的問題,是否在DataMember屬性應用的屬性中引發異常是一種很好的做法?
我所做的是加載壞數據,然後有邏輯來標記它,以便用戶可以修復它。而邏輯不處理錯誤的數據。加載文件將有不好的數據。如果用戶將XML插入,我不想再回到XML,因爲它們可能會將其插入甚至不是有效的XML。 – Paparazzi