请教:以下这两个方法完全一样,就是每一个实体类一个反序列化的方法,怎么写成一个通用的方法,将实体类传过来使用?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;
}
反序列化的方法
{
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;
}
反序列化的方法
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);
}
}
未能找到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)
public calss TestClass<T> : IEnumerable<T>
我先测试下是否可以。
请问您写的方法我应该怎么调用呢?
现在提示
用户代码未处理 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:
{
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;
}
参考、综合多位大师的方法,成功解决问题,多谢