由於各種原因,我不得不將類型化數據集發送到WCF服務端點。這很好地工作,除了反序列化之外,每個DataTable中每行的RowState都設置爲'Added',而不管它們在客戶端上是什麼。如果我將序列化流寫入文件,我會發現RowState不是序列化數據的一部分。如何添加這個以便我可以跨越服務邊界保留RowState?不,我認爲它很重要,但在服務進程.NET運行4.0使用DataContractSerializer序列化DataSet時保留DataRowState
2
A
回答
1
客戶端進程.NET運行3.5下面是RowState
屬性的代碼:
public DataRowState RowState
{
get
{
if (this.oldRecord == this.newRecord)
{
if (this.oldRecord == -1)
{
return DataRowState.Detached;
}
if (0 < this._columns.ColumnsImplementingIChangeTrackingCount)
{
foreach (DataColumn column in this._columns.ColumnsImplementingIChangeTracking)
{
object obj2 = this[column];
if ((DBNull.Value != obj2) && ((IChangeTracking)obj2).IsChanged)
{
return DataRowState.Modified;
}
}
}
return DataRowState.Unchanged;
}
if (this.oldRecord == -1)
{
return DataRowState.Added;
}
if (this.newRecord == -1)
{
return DataRowState.Deleted;
}
return DataRowState.Modified;
}
}
,你可以看到,對於它的價值可能沒有什麼可以做的,因爲它是被計算而不是被存儲的。最簡單的解決方案可能是將另一列添加到包含行狀態的DataSet中。
(爲什麼總是算出來的值新增最有可能的,因爲當你的序列化數據集水化回服務器上,創建並添加到數據集中的新行 - ?所以價值是相當如果你按照上面的建議添加另一列到數據集,那將需要修改服務器代碼以便能夠檢查和處理它 - 如果你要做出這樣的改變,那麼它可能是值得的做整件事,並重新編碼該服務,以使用適當的可序列化DTOs?)。
3
我有這個問題也和發現這是一個非常簡單的解決方案: 而不是使用DataSet對象的「中WriteXML法」,「手動」序列化對象使用BinaryFormatter
:
BinaryFormatter bf = new BinaryFormatter();
using(FileStream fs = File.Open("datastore.dat", FileMode.Create, FileAccess.Write))
{
bf.Serialize(fs, ds);
}
當你反序列化時,對象與之前的狀態完全相同,包括行狀態數據。
相關問題
- 1. 使用DataContractSerializer序列化時命名'ArrayOf'
- 2. DataContractSerializer:保留參考
- 3. 實體不使用DataContractSerializer序列化
- 4. 序列化失敗使用的DataContractSerializer
- 5. 使用DataContractSerializer自定義序列化
- 6. WCF:如何使用DataContractSerializer序列化DataTable?
- 7. 使用DataContractSerializer序列化覆蓋屬性
- 8. 使用DataContractSerializer序列化對象
- 9. SerializationException使用DataContractSerializer序列化newtonsoft jobject
- 10. 使用DataContractSerializer序列化和反序列化多個對象
- 11. 使用DataContractSerializer的序列化,但不能反序列化回
- 12. 使用DataContractSerializer時保留集合中的元素名稱
- 13. 使用DataContractSerializer序列化時缺少XML的末尾
- 14. 如何防止在使用DataContractSerializer時代理的序列化?
- 15. 用DataContractSerializer處理序列化數組
- 16. DataContractSerializer不反序列化引用
- 17. 如何使用DataContractSerializer格式化IDictionary的序列化?
- 18. 反序列化的XML與DataContractSerializer的
- 19. DataContractSerializer不反序列化所有變量
- 20. DataContractSerializer的反序列化已知類型
- 21. DataContractSerializer未序列化一個屬性
- 22. DataContractSerializer的序列化不收集
- 23. WCF的DataContractSerializer無法序列化
- 24. WCF DataContractSerializer的反序列化方向
- 25. 如何在使用JSON序列化/反序列化Pandas DataFrame時保留索引的時區
- 26. 從json反序列化時保留引用
- 27. 使用json.net進行反序列化時,數組順序是否保留?
- 28. Json.Net反序列化,保留一些屬性序列化的
- 29. 使用xsd.exe反序列化 - 如何反序列化爲對象,而不是DataSet?
- 30. XML序列化 - 當要使用的DataContractSerializer /二進制/ XMLSerialiser
感謝堆 - 偉大的答案。是的 - 很難說這是一個錯誤,因爲從DataSets的角度來看,這些行是在補液時添加的。 我懷疑DTO可能是要走的路。 – Chruzi 2010-05-25 01:32:10