请教:以下这两个方法完全一样,就是每一个实体类一个反序列化的方法,怎么写成一个通用的方法,将实体类传过来使用?public static List<BaseServiceRef.tbasemenufunction> Deserialize_MenuFunc(string _JsonText)
        {
            string s = ReleaseXmlTag(_JsonText);
            List<BaseServiceRef.tbasemenufunction> _Test = new List<BaseServiceRef.tbasemenufunction>();
            DataContractJsonSerializer _Json = new DataContractJsonSerializer(_Test.GetType());
            byte[] _Using = System.Text.Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
            _MemoryStream.Position = 0;            _Test = (List<BaseServiceRef.tbasemenufunction>)_Json.ReadObject(_MemoryStream);
            return _Test;
        }
        public static List<BaseServiceRef.tbasefunctiongrant> Deserialize_UserGrant(string _JsonText)
        {
            string s = ReleaseXmlTag(_JsonText);
            List<BaseServiceRef.tbasefunctiongrant> _Test = new List<BaseServiceRef.tbasefunctiongrant>();
            DataContractJsonSerializer _Json = new DataContractJsonSerializer(_Test.GetType());
            byte[] _Using = System.Text.Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
            _MemoryStream.Position = 0;            _Test = (List<BaseServiceRef.tbasefunctiongrant>)_Json.ReadObject(_MemoryStream);
            return _Test;
        }
反序列化的方法

解决方案 »

  1.   

    可以用泛形:
    public static T JsonDeserialize<T>(string json)
    {
        DataContractJsonSerializer zer = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
        {
            return (T)zer.ReadObject(ms);
        }
    }
      

  2.   

    为什么老提示如下:
    未能找到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)
      

  3.   

    好像是写方法的类必须继承是定义为
    public calss  TestClass<T> : IEnumerable<T>
    我先测试下是否可以。
      

  4.   


    请问您写的方法我应该怎么调用呢?
    现在提示
    用户代码未处理 System.InvalidCastException
      Message=无法将类型为“System.Collections.Generic.List`1[System.Object]”的对象强制转换为类型“System.Collections.Generic.Dictionary`2[System.String,System.Object]”。
      StackTrace:
           位于 System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract contract, Object value, XmlObjectSerializerReadContextComplexJson context)
           位于 System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream)
           位于 HMS.Common.SerializeObject.JsonDeserialize[T](String _JsonText)
           位于 HMS.SysManage.BuildingNo.BuildingList.webClient_DownloadStringCompleted(Object sender, DownloadStringCompletedEventArgs e)
           位于 System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)
           位于 System.Net.WebClient.DownloadStringOperationCompleted(Object arg)
      InnerException: 
      

  5.   

    public static List<T> Deserialize_Obj2<T>(string _JsonText)
            {
                string s = ReleaseXmlTag(_JsonText);
                List<T> _Test = new List<T>();
                DataContractJsonSerializer _Json = new DataContractJsonSerializer(_Test.GetType());
                byte[] _Using = System.Text.Encoding.UTF8.GetBytes(s);
                System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
                _MemoryStream.Position = 0;            _Test = (List<T>)_Json.ReadObject(_MemoryStream);
                return _Test;
            }
    参考、综合多位大师的方法,成功解决问题,多谢