Convertire un object in una stringa XML

Ho una class denominata WebserviceType ho ricevuto dallo strumento xsd.exe da un file XSD.

Ora voglio deserializzare un’istanza di un object WebServiceType su una stringa. Come posso fare questo?

L’object MethodCheckType ha come parametro una matrice WebServiceType .

Il mio primo tentativo è stato come se lo avessi serializzato: con un XmlSerializer e un StringWriter (durante la serializzazione ho usato un StringReader ).

Questo è il metodo con cui serializzo l’object WebServiceType :

 XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType)); MethodCheckType output = null; StringReader reader = null; // catch global exception, logg it and throw it try { reader = new StringReader(path); output = (MethodCheckType)serializer.Deserialize(reader); } catch (Exception) { throw; } finally { reader.Dispose(); } return output.WebService; 

Modificare:

Forse potrei dirlo in parole diverse: ho un’istanza di questo object MethodCheckType e d’altra parte ho il documento XML da cui ho serializzato questo object. Ora voglio convertire questa istanza in un documento XML sotto forma di stringa. Dopo questo devo dimostrare se entrambe le stringhe (di documenti XML) sono le stesse. Questo devo fare, perché faccio test unitari del primo metodo in cui leggo un documento XML in un StringReader e lo serializzo in un object MethodCheckType .

Ecco il metodo di conversione per entrambi i modi. questo = istanza della tua class

 public string ToXML() { var stringwriter = new System.IO.StringWriter(); var serializer = new XmlSerializer(this.GetType()); serializer.Serialize(stringwriter, this); return stringwriter.ToString(); } public static YourClass LoadFromXMLString(string xmlText) { var stringReader = new System.IO.StringReader(xmlText); var serializer = new XmlSerializer(typeof(YourClass )); return serializer.Deserialize(stringReader) as YourClass ; } 

Mi rendo conto che questo è un post molto vecchio, ma dopo aver esaminato la risposta di LB ho pensato a come avrei potuto migliorare la risposta accettata e renderla generica per la mia applicazione. Ecco cosa mi è venuto in mente:

 public static string Serialize(T dataToSerialize) { try { var stringwriter = new System.IO.StringWriter(); var serializer = new XmlSerializer(typeof(T)); serializer.Serialize(stringwriter, dataToSerialize); return stringwriter.ToString(); } catch { throw; } } public static T Deserialize(string xmlText) { try { var stringReader = new System.IO.StringReader(xmlText); var serializer = new XmlSerializer(typeof(T)); return (T)serializer.Deserialize(stringReader); } catch { throw; } } 

Questi metodi possono ora essere inseriti in una class helper statica, il che significa nessuna duplicazione di codice per ogni class che deve essere serializzata.

  public static string Serialize(object dataToSerialize) { if(dataToSerialize==null) return null; using (StringWriter stringwriter = new System.IO.StringWriter()) { var serializer = new XmlSerializer(dataToSerialize.GetType()); serializer.Serialize(stringwriter, dataToSerialize); return stringwriter.ToString(); } } public static T Deserialize(string xmlText) { if(String.IsNullOrWhiteSpace(xmlText)) return default(T); using (StringReader stringReader = new System.IO.StringReader(xmlText)) { var serializer = new XmlSerializer(typeof(T)); return (T)serializer.Deserialize(stringReader); } }