2009-07-30 8 views
1

Es scheint, dass sgen.exe generischen Typ XmlSerializer nicht generieren konnte, richtig?
Mein genereic Typ:Fehler in Sgen.exe

[Serializable] 
[XmlRoot(ElementName = "Masterx")] 
public class Masterx<T> where T : class, new() 
{....} 

Serializer Code:

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; 
    } 

Nach Lauf sgen.exe und generierte Assembly überprüfen, indem Sie "Reflector" mit, ich, dass generierte Assembly nicht gefunden MasterxXmlSerializer Klasse enthalten haben , Warum?

Hat jemand die gleiche Erfahrung? Wie man es repariert?

+0

Scheint niemand mein Problem wissen :( – Rock

Antwort

0

Nein, sgen generiert keine Serializer für offene generische Typen. Als generelle Regel mit XmlSerializer können vorgenerierte Assemblies nicht hilfreich sein, wenn das gesamte Schema nicht über die statische Analyse verfügbar ist.

Wenn Sie also Generics verwenden, müssen Sie alle abgeleiteten Subklassen im Code definieren, um vorgenerierte Assemblys verwenden zu können.