如何在 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