看起来sgen.exe不能生成泛型类型XmlSerializer,对吧?
我的泛型类型:
[Serializable]
[XmlRoot(ElementName = "Masterx")]
public class Masterx<T> where T : class, new()
{....}序列化程序代码:
protected virtual List<T> ParseXMLToObject<T>(string resultXML) where T : class, new()
{
//return ParseXMLToObject<T>(resultXML, "Masterx");
XmlSerializer xs = new XmlSerializer(typeof(Masterx<T>));
System.IO.StringReader sr = new System.IO.StringReader(resultXML);
XmlReader xr = XmlReader.Create(sr);
Masterx<T> masterx = null;
if (!string.IsNullOrEmpty(resultXML))
{
if (xs.CanDeserialize(xr))
{
//Parse the xml to object
masterx = xs.Deserialize(xr) as Masterx<T>;
}
}
List<T> rtnObjList = new List<T>();
if (masterx != null)
{
rtnObjList = masterx.MasterxRowList;
}
return rtnObjList;
}运行sgen.exe并使用Reflector检查生成的程序集后,我发现生成的程序集不包含MasterxXmlSerializer类,为什么?
有没有人有同样的经历?如何修复它?
发布于 2010-02-02 07:31:07
不,sgen不会为开放泛型类型生成序列化程序。作为XmlSerializer的一般规则,如果无法通过静态分析获得整个模式,则预先生成的程序集不会有任何帮助。
因此,如果使用泛型,则需要在代码中定义所有派生的子类,以便能够使用预先生成的程序集。
https://stackoverflow.com/questions/1204913
复制相似问题