2017-08-03 206 views
1

根据我们当前的代码实现,我们需要将System.Data.DataTable存储在缓存中。它在使用HttpRuntime.Cache时可以正常工作,但不能在Apache Ignite中使用。 以下是代码片段。如何在Apache Ignite中存储DataTable?

IIgnite ignite = Ignition.Start(); 
ICache<string, object> cache = ignite.GetOrCreateCache<string, object>("cache"); 
DataTable table = new DataTable(); 
cache.Put("1", table); 

这将引发“无法投型“Apache.Ignite.Core.Impl.Binary.BinaryWriter为键入‘System.IConvertible’的对象”的错误。

基于https://apacheignite-net.readme.io/docs/serialization, 的信息DataTable实现ISerializable并具有Seri​​alizable属性。它应该能够序列化。我不知道为什么我得到这个错误。有什么想法吗?

环境:Ignite.NET 2.1时,Visual Studio 2015年

回答

2

我转载的问题,我会说,这是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

补充:任何额外的信息与StreamingContext关联。

Ignite使用它来存储用于内部目的的BinaryWriter对象。

无论如何,.NET框架不会被修复,所以我已经提交了一个Ignite.NET错误:https://issues.apache.org/jira/browse/IGNITE-5927