2017-08-03 46 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