我正在使用 protobuf 序列化数据集并将其从 WCF 服务发送到 winfom 客户端。
我在这里面临两个问题......
DataSet 来自 DB,它包含一个 system.Object 类型的列,protobuf 无法处理并抛出异常...
无法序列化“System.Object”类型的数据列。仅支持以下列类型:Boolean、Byte、Byte[]、Char、Char[]、DateTime、Decimal、Double、Guid、Int16、Int32、Int64、Single、String。"}
数据集序列化代码
using (var ms = new MemoryStream())
{
if (ReportData.Tables.Count > 0)
{
DataSerializer.Serialize(ms, ReportData);
}
}
如何强制 protobuf 序列化 system.Object 数据类型列。我尝试将此 system.Object 类型列转换为字符串然后序列化...在这种情况下一切正常,但这是一个耗时的过程,因为我需要克隆表并导入所有行(我的数据集包含数百万行)。
DataTable dtCloned = ReportData.Tables[0].Clone();
foreach (DataColumn column in dtCloned.Columns)
{
if (column.DataType == typeof(System.Object))
objectColumns.Add(column);
}
if (objectColumns.Count > 0)
{
foreach (DataColumn column in objectColumns)
{
column.DataType = typeof(System.String);
}
}
try
{
foreach (DataRow row in ReportData.Tables[0].Rows)
{
dtCloned.ImportRow(row);
}
}
catch (Exception ex)
{
}
这是我为此编写的示例代码。此 System.Object 的 DB 类型是 SQL_Variant,我们无法更改它,因为这是旧版 SP,并且该列包含不同类型的数据(十进制、int varchar)。
有没有更好的方法来实现同样的目标。
当这个序列化失败并抛出错误时......在客户端我得到了通信异常,其中不知道出了什么问题。它唯一说的是......
“在可靠会话完全完成之前,底层安全会话出现故障。可靠会话出现故障。”
我尝试在 WCF 服务端设置以下内容,但没有用...
<serviceDebug includeExceptionDetailInFaults="true" />
还尝试通过 FaultException... 不走运
如何将正确的异常和信息从 WCF 服务传递给我的客户。
提前致谢。