如何在Apache Ignite中存储DataTable?

时间:2017-08-03 16:47:55

标签: c# 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);

它将抛出&#34;无法转换类型&#39; Apache.Ignite.Core.Impl.Binary.BinaryWriter&#39;输入&#39; System.IConvertible&#39;&#34;错误。

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

环境:Ignite.NET 2.1,Visual Studio 2015

1 个答案:

答案 0 :(得分: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