如何在 Apache Ignite 中存储 DataTable?
How to store DataTable in Apache Ignite?
根据我们目前的代码实现,我们需要在缓存中存储System.Data.DataTable。它在使用 HttpRuntime.Cache 时工作正常,但在 Apache Ignite 中却不行。
以下是代码片段。
IIgnite ignite = Ignition.Start();
ICache<string, object> cache = ignite.GetOrCreateCache<string, object>("cache");
DataTable table = new DataTable();
cache.Put("1", table);
它会抛出 "Unable to cast object of type 'Apache.Ignite.Core.Impl.Binary.BinaryWriter' to type 'System.IConvertible'" 错误。
根据 https://apacheignite-net.readme.io/docs/serialization 中的信息,
DataTable 实现 ISerializable 并具有 Serializable 属性。它应该能够序列化。我不确定为什么会出现此错误。有什么想法吗?
环境:Ignite.NET2.1,Visual Studio2015
我已经重现了这个问题,我会说这是 System.Data.DataTable
中的一个错误。这是 code:
public virtual void GetObjectData(SerializationInfo info, StreamingContext context) {
SerializationFormat remotingFormat = RemotingFormat;
bool isSingleTable = context.Context != null ? Convert.ToBoolean(context.Context, CultureInfo.InvariantCulture) : true;
SerializeDataTable(info, context, isSingleTable, remotingFormat);
}
异常来自
Convert.ToBoolean(context.Context, CultureInfo.InvariantCulture)
假设 Context
可以转换为 bool
看起来不正确,请参阅 MSDN:
additional: Any additional information to be associated with the
StreamingContext.
Ignite 使用它来存储 BinaryWriter
对象以供内部使用。
无论如何,.NET 框架不会被修复,所以我已经提交了一个 Ignite.NET 错误:https://issues.apache.org/jira/browse/IGNITE-5927
根据我们目前的代码实现,我们需要在缓存中存储System.Data.DataTable。它在使用 HttpRuntime.Cache 时工作正常,但在 Apache Ignite 中却不行。 以下是代码片段。
IIgnite ignite = Ignition.Start();
ICache<string, object> cache = ignite.GetOrCreateCache<string, object>("cache");
DataTable table = new DataTable();
cache.Put("1", table);
它会抛出 "Unable to cast object of type 'Apache.Ignite.Core.Impl.Binary.BinaryWriter' to type 'System.IConvertible'" 错误。
根据 https://apacheignite-net.readme.io/docs/serialization 中的信息, DataTable 实现 ISerializable 并具有 Serializable 属性。它应该能够序列化。我不确定为什么会出现此错误。有什么想法吗?
环境:Ignite.NET2.1,Visual Studio2015
我已经重现了这个问题,我会说这是 System.Data.DataTable
中的一个错误。这是 code:
public virtual void GetObjectData(SerializationInfo info, StreamingContext context) {
SerializationFormat remotingFormat = RemotingFormat;
bool isSingleTable = context.Context != null ? Convert.ToBoolean(context.Context, CultureInfo.InvariantCulture) : true;
SerializeDataTable(info, context, isSingleTable, remotingFormat);
}
异常来自
Convert.ToBoolean(context.Context, CultureInfo.InvariantCulture)
假设 Context
可以转换为 bool
看起来不正确,请参阅 MSDN:
additional: Any additional information to be associated with the StreamingContext.
Ignite 使用它来存储 BinaryWriter
对象以供内部使用。
无论如何,.NET 框架不会被修复,所以我已经提交了一个 Ignite.NET 错误:https://issues.apache.org/jira/browse/IGNITE-5927