如何编写使用的DataContractSerializer为泛型类型的自定义序列化? [英] How to write a custom serializer by using DataContractSerializer for generic type?

查看:184
本文介绍了如何编写使用的DataContractSerializer为泛型类型的自定义序列化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写一个自定义的串行存储会话状态进入 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆