如何编写使用的DataContractSerializer为泛型类型的自定义序列化? [英] How to write a custom serializer by using DataContractSerializer for generic type?
问题描述
我想写一个自定义的串行存储会话状态进入 Azure的缓存(preVIEW),这样就意味着这个自定义序列化必须实现 IDataCacheObjectSerializer
(如果我错了,请让我知道的)。为什么我需要写这个custome串行的原因是我需要序列包含一些 System.Data.Linq.EntitySet
属性一些LINQ的对象。和默认的序列化 NetDataContractSerializer
不能序列化的EntitySet
。
I want to write a custom serializer for storing the session state into Azure Cache (Preview), so that means this custom serializer has to implement IDataCacheObjectSerializer
(if I am wrong, please let me know). The reason why I need to write this custome serializer is i need to serialize some Linq objects which contain some System.Data.Linq.EntitySet
attributes. And the default serializer NetDataContractSerializer
cannot serialize the EntitySet
.
我的计划是通过编写自定义序列的DataContractSerializer
(我搜索所提到的一些文章的DataContractSerializer
可以序列化的EntitySet
,所以如果我错了,让我知道,请的),但问题是我怎么能写,可以支持泛型类型的自定义序列化
My plan is to write a custom serializer by using DataContractSerializer
(I searched some articles that mentioned DataContractSerializer
can serialize EntitySet
, so if I am wrong, let me know please), but the problem is how I can write a custom serializer that can support generic type.
目前,我的codeS为自定义序列像:
Currently, my codes for custom serializer are like:
public class CustomSerializer : IDataCacheObjectSerializer
{
public CustomSerializer()
{ }
public object Deserialize(System.IO.Stream stream)
{
/* How can I know the type of object?????? */
DataContractSerializer dcs = new DataContractSerializer("Type of object");
}
public void Serialize(System.IO.Stream stream, object value)
{
DataContractSerializer dcs = new DataContractSerializer(value.GetType());
dcs.WriteObject(stream, value);
}
}
顺便说一句,我已经改变了LINQ的序列化模式为单向
By the way, I have changed the Linq Serialization Mode to "Unidirectional"
推荐答案
我没跟IDataCacheObjectSerializer工作,但共同的解决办法是这样的:
I did not work with IDataCacheObjectSerializer, but common solution looks like this:
public sealed class CustomSerializer<T> : IDataCacheObjectSerializer
{
object IDataCacheObjectSerializer.Deserialize(System.IO.Stream stream)
{
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
return dcs.ReadObject(stream);
}
void IDataCacheObjectSerializer.Serialize(System.IO.Stream stream, object value)
{
if (!(value is T))
{
throw new AgrumentException();
}
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
dcs.WriteObject(stream, value);
}
}
这篇关于如何编写使用的DataContractSerializer为泛型类型的自定义序列化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!