首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enyim序列化错误Linq

Enyim序列化错误Linq
EN

Stack Overflow用户
提问于 2011-08-30 01:06:07
回答 2查看 895关注 0票数 0

我使用Devart来执行DB对象和存储过程映射。

现在我想在缓存中存储一个存储过程对象结果(通过MemCached使用Enyim )。

当我尝试这样做时,我遇到了这样的错误(简而言之:在Devart.Data.Linq中键入Devart.Data.Linq.a is not signed as serializable)

代码语言:javascript
复制
Enyim.Caching.MemcachedClient - System.Runtime.Serialization.SerializationException: Il tipo 'Devart.Data.Linq.a' nell'assembly 'Devart.Data.Linq, Version=2.50.29.0, Culture=neutral, PublicKeyToken=09af7300eec23701' non è contrassegnato come serializzabile.
   in System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   in System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
   in Enyim.Caching.Memcached.DefaultTranscoder.SerializeObject(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 219
   in Enyim.Caching.Memcached.DefaultTranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 65
   in Enyim.Caching.Memcached.DefaultTranscoder.Enyim.Caching.Memcached.ITranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 18
   in Enyim.Caching.MemcachedClient.PerformStore(StoreMode mode, String key, Object value, UInt32 expires, UInt64& cas, Int32& statusCode) in d:\d\repo\EnyimMemcached\Enyim.Caching\MemcachedClient.cs:riga 313Enyim.Caching.MemcachedClient - System.Runtime.Serialization.SerializationException: Il tipo 'Devart.Data.Linq.a' nell'assembly 'Devart.Data.Linq, Version=2.50.29.0, Culture=neutral, PublicKeyToken=09af7300eec23701' non è contrassegnato come serializzabile.
   in System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   in System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
   in Enyim.Caching.Memcached.DefaultTranscoder.SerializeObject(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 219
   in Enyim.Caching.Memcached.DefaultTranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 65
   in Enyim.Caching.Memcached.DefaultTranscoder.Enyim.Caching.Memcached.ITranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 18
   in Enyim.Caching.MemcachedClient.PerformStore(StoreMode mode, String key, Object value, UInt32 expires, UInt64& cas, Int32& statusCode) in d:\d\repo\EnyimMemcached\Enyim.Caching\MemcachedClient.cs:riga 313

这是Enyim日志。我确信MemCached的配置是正确的,因为我尝试过通过远程登录在缓存中获取和设置对象,但这已经完成了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-31 16:00:18

您的linq表达式尚未执行,因此没有可序列化的对象可写入缓存。

如果您在IEnumerable上执行".ToList()“,就应该没问题。

票数 0
EN

Stack Overflow用户

发布于 2011-08-31 23:30:04

根据堆栈跟踪,Enyim.Caching.MemcachedClient使用BinaryFormatter来序列化对象。LinqConnect实体不是为通过BinaryFormatter序列化而设计的,应改用DataContractSerializer。关于这种序列化方式的更多信息,请参考下面的文章:http://msdn.microsoft.com/en-us/library/bb546184.aspx#Y1680 (它是关于LINQ to SQL的,但也可以应用于LinqConnect )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7233313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档