事情是这样的,ASP.NET AJAX调用服务器端的代码,返回一个复杂类型,GongWenList,其中GongWenList有两个属性,(1):List<GongWen>类型的ListGongWen,(2)简单的int类型的iItemCount;其中GongWen为一个 由简单类型组成的类.
这三个类结构如下:
Code
public class GongWen
{
private string m_sSender;
public string sSender
{
get { return m_sSender; }
set { m_sSender = value; }
}
private string m_sBH;
public string sBH
{
get { return m_sBH; }
set { m_sBH = value; }
}
private string m_sHJ;
public string sHJ
{
get { return m_sHJ; }
set { m_sHJ = value; }
}
private string m_sQS;
public string sQS
{
get { return m_sQS; }
set { m_sQS = value; }
}
private string m_sPreSQYH;
public string sPreSQYH
{
get { return m_sPreSQYH; }
set { m_sPreSQYH = value; }
}
private string m_sGWZW;
public string sGWZW
{
get { return m_sGWZW; }
set { m_sGWZW = value; }
}
private string m_sFWZH;
public string sFWZH
{
get { return m_sFWZH; }
set { m_sFWZH = value; }
}
private string m_sItemClass;
public string sItemClass
{
get { return m_sItemClass; }
set { m_sItemClass = value; }
}
private string m_sID;
public string sID
{
get { return m_sID; }
set { m_sID = value; }
}
private string m_sTplType;
public string sTplType
{
get { return m_sTplType; }
set { m_sTplType = value; }
}
private string m_sDateTimeReceived;
public string sDateTimeReceived
{
get { return m_sDateTimeReceived; }
set { m_sDateTimeReceived = value; }
}
public GongWen()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public GongWen(string sSender, string sBH, string sHJ, string sQS,
string sPreSQYH, string sGWZH, string sFWZH, string sItemClass,
string sID, string sTplType, string sDateTimeReceived)
{
this.m_sSender = sSender;
this.m_sBH = sBH;
this.m_sHJ = sHJ;
this.m_sQS = sQS;
this.m_sPreSQYH = sPreSQYH;
this.m_sGWZW = sGWZH;
this.m_sFWZH = sFWZH;
this.m_sItemClass = sItemClass;
this.m_sID = sID;
this.m_sTplType = sTplType;
this.m_sDateTimeReceived = sDateTimeReceived;
}
}
public class GongWen
{
private string m_sSender;
public string sSender
{
get { return m_sSender; }
set { m_sSender = value; }
}
private string m_sBH;
public string sBH
{
get { return m_sBH; }
set { m_sBH = value; }
}
private string m_sHJ;
public string sHJ
{
get { return m_sHJ; }
set { m_sHJ = value; }
}
private string m_sQS;
public string sQS
{
get { return m_sQS; }
set { m_sQS = value; }
}
private string m_sPreSQYH;
public string sPreSQYH
{
get { return m_sPreSQYH; }
set { m_sPreSQYH = value; }
}
private string m_sGWZW;
public string sGWZW
{
get { return m_sGWZW; }
set { m_sGWZW = value; }
}
private string m_sFWZH;
public string sFWZH
{
get { return m_sFWZH; }
set { m_sFWZH = value; }
}
private string m_sItemClass;
public string sItemClass
{
get { return m_sItemClass; }
set { m_sItemClass = value; }
}
private string m_sID;
public string sID
{
get { return m_sID; }
set { m_sID = value; }
}
private string m_sTplType;
public string sTplType
{
get { return m_sTplType; }
set { m_sTplType = value; }
}
private string m_sDateTimeReceived;
public string sDateTimeReceived
{
get { return m_sDateTimeReceived; }
set { m_sDateTimeReceived = value; }
}
public GongWen()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public GongWen(string sSender, string sBH, string sHJ, string sQS,
string sPreSQYH, string sGWZH, string sFWZH, string sItemClass,
string sID, string sTplType, string sDateTimeReceived)
{
this.m_sSender = sSender;
this.m_sBH = sBH;
this.m_sHJ = sHJ;
this.m_sQS = sQS;
this.m_sPreSQYH = sPreSQYH;
this.m_sGWZW = sGWZH;
this.m_sFWZH = sFWZH;
this.m_sItemClass = sItemClass;
this.m_sID = sID;
this.m_sTplType = sTplType;
this.m_sDateTimeReceived = sDateTimeReceived;
}
}
然后是GongWenList类型的代码:
Code
public class GongWenList
{
public GongWenList()
{
m_listGongWen = new List<GongWen>();
}
private IList<GongWen> m_listGongWen;
public IList<GongWen> ListGongWen
{
get { return m_listGongWen; }
set { m_listGongWen = value; }
}
private int m_iItemCount;
public int iItemCount
{
get { return m_iItemCount; }
set { m_iItemCount = value; }
}
}
public class GongWenList
{
public GongWenList()
{
m_listGongWen = new List<GongWen>();
}
private IList<GongWen> m_listGongWen;
public IList<GongWen> ListGongWen
{
get { return m_listGongWen; }
set { m_listGongWen = value; }
}
private int m_iItemCount;
public int iItemCount
{
get { return m_iItemCount; }
set { m_iItemCount = value; }
}
}
这样我们的WebService直接返回这样的类型,当然是不能被JS所识别的
于是乎就继承JavaScriptConverter类实现了自己的转换器如下:
Code
public class GongWenListConverter : JavaScriptConverter
{
private IEnumerable<Type> m_supportTypes;
public GongWenListConverter()
{
//
//TODO: 在此处添加构造函数逻辑, typeof(GongWen)
//
this.m_supportTypes = new ReadOnlyCollection<Type>(new Type[] { typeof(GongWenList) });
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
IDictionary<string, object> result = new Dictionary<string, object>();
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
//if (obj != null)
//{
// GongWenList gongWenList = obj as GongWenList;
// if (gongWenList.Count > 0)
// {
// GongWen[] gongWens = new GongWen[gongWenList.Count];
// for (int i = 0; i < gongWens.Length; i++)
// {
// gongWens[i] = gongWenList[i];
// }
// result["GongWenCollection"] = gongWens;
// result["iItemCount"] = gongWenList.iItemCount;
// }
//}
GongWenList gongwenList = obj as GongWenList;
if (gongwenList.ListGongWen != null)
{
result["GongWenCollection"] = gongwenList.ListGongWen;
}
result["iItemCount"] = gongwenList.iItemCount;
return result;
}
public override IEnumerable<Type> SupportedTypes
{
get { return this.m_supportTypes; }
}
}
public class GongWenListConverter : JavaScriptConverter
{
private IEnumerable<Type> m_supportTypes;
public GongWenListConverter()
{
//
//TODO: 在此处添加构造函数逻辑, typeof(GongWen)
//
this.m_supportTypes = new ReadOnlyCollection<Type>(new Type[] { typeof(GongWenList) });
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
IDictionary<string, object> result = new Dictionary<string, object>();
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
//if (obj != null)
//{
// GongWenList gongWenList = obj as GongWenList;
// if (gongWenList.Count > 0)
// {
// GongWen[] gongWens = new GongWen[gongWenList.Count];
// for (int i = 0; i < gongWens.Length; i++)
// {
// gongWens[i] = gongWenList[i];
// }
// result["GongWenCollection"] = gongWens;
// result["iItemCount"] = gongWenList.iItemCount;
// }
//}
GongWenList gongwenList = obj as GongWenList;
if (gongwenList.ListGongWen != null)
{
result["GongWenCollection"] = gongwenList.ListGongWen;
}
result["iItemCount"] = gongwenList.iItemCount;
return result;
}
public override IEnumerable<Type> SupportedTypes
{
get { return this.m_supportTypes; }
}
}