2013-01-24 10 views
1

J'ai trois classes qui sont sérialisées en données XML via la méthode XMLserializer. Est-il possible de rendre la méthode accessible par tous plutôt que d'avoir trois méthodes xmlserialize dans mon code.Rendre une méthode XMLSerialzier une classe publique

//Here I'm writing to my class with the data that needs to be serialized     
PERSON r = new PERSON(); 
Input l = new Search.Input(); 
INPUTSEARCHNBR ln = new INPUTSEARCHNBR(); 
ln.number = pnumber;     
r.query = ln;     
string xml = doSerialization(r); 

//Call the xmlserializer method 
private static string doSerialization(PERSON r) 
{ 
    string serializedValue = string.Empty; 

    try 
    { 
     XmlSerializer xmlSerializer = new XmlSerializer(r.GetType()); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      xmlSerializer.Serialize(ms, r); 

      ms.Position = 0; 
      var sr = new StreamReader(ms); 
      serializedValue = sr.ReadToEnd(); 
     } 


     serializedVal = serializedValue.Replace("version=\"0\"", string.Empty).Replace("<?xml version=\"1.0\"?>", string.Empty).Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", string.Empty); 
    } 

    return serializedVal; 
} 

Mon code répète ce deux plus de temps pour deux classes différentes, il écrit à la classe et appelle ensuite une autre méthode XMLSERIALIZE parce que l'entrée de la méthode est un type de classe différente. Y at-il un moyen de rendre la méthode public ou avoir une classe ou toute autre manière de sorte que je n'ai pas besoin de coller deux méthodes xmlserialize supplémentaires qui sont exactement les mêmes mais la classe d'entrée est différente.

Répondre

2

Puisque vous ne faites rien qui est classe spécifique, vous pouvez taper object:

private static string doSerialization(object r) 
{ 
    ... 
1

Comme chue x dit, vous pouvez utiliser un paramètre object ou faire de la méthode générique. La méthode générique n'aurait aucun avantage pour vous en ce moment, mais vous pourriez l'utiliser pour, par exemple, juste autoriser des types spécifiques.

private static string doSerialization<T>(T r) 
{ 
    // .. 
} 

Pour simplement permettre à des types personnalisés:

private static string doSerialization<T>(T r) where T : YourBaseClass 
{ 
    // .. 
} 
Questions connexes