根据我们当前的代码实现,我们需要在缓存中存储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并具有Serializable属性。它应该能够序列化。我不知道为什么会出现这个错误。有什么想法吗?
环境:Ignite.NET 2.1,Visual Studio 2015
答案 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