gpt4 book ai didi

wcf - 使用 DataContractSerializer 序列化 DataSet 时保留 DataRowState

转载 作者:行者123 更新时间:2023-12-04 06:52:39 25 4
gpt4 key购买 nike

由于各种原因,我不得不将类型化数据集发送到 WCF 服务端点。这工作正常,除了在反序列化时,每个 DataTable 中每一行的 RowState 都设置为“已添加”,无论它们在客户端上是什么。如果我将序列化流写入文件,我会看到 RowState 不是序列化数据的一部分。如何添加它以便我可以跨服务边界保留 RowState?并不是我认为这很重要,但是客户端进程正在运行 .net 3.5 而服务进程正在运行 .net 4.0

最佳答案

这是RowState的代码属性(property):

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 添加另一列。

(为什么它总是计算出增加的值?很可能是因为当你的序列化数据集在服务器上重新水化时,新行被创建并添加到数据集中 - 所以这个值实际上是正确的。如果你遵循上述建议向数据集中添加另一列,这将需要更改服务器代码才能检查和处理它 - 如果您要进行这种更改,那么也许值得做整个事情并将该服务重新编码为改用适当的可序列化 DTO?)。

关于wcf - 使用 DataContractSerializer 序列化 DataSet 时保留 DataRowState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com