Così ho il seguente codice:C#: Per essere XML serializzabile, tipi che ereditano da IEnumerable devono avere un'implementazione di Add (System.Object)
private static string FindAppointmentsAsXmlString(CalendarView calendar, ExchangeService serv)
{
FindItemsResults appointments =
serv.FindAppointments(WellKnownFolderName.Calendar, calendar);
var serializer = new XmlSerializer(appointments.GetType());
var writer = new StringWriter();
try{
serializer.Serialize(writer, appointments);
Console.WriteLine(writer.GetStringBuilder().ToString());
Console.ReadLine();
}
catch (Exception ex) {
Console.WriteLine(ex);
Console.ReadLine();
}
return writer.GetStringBuilder().ToString();
}
Quando si inizializza serializzatore, ottengo l'eccezione:
Per essere serializzabili in XML, i tipi che ereditano da IEnumerable devono avere un'implementazione di Aggiungi (System.Object) a tutti i livelli della loro gerarchia di ereditarietà.
Microsoft.Exchange.WebServices.Data.FindItemsResults non implementa Aggiungi (System.Object).
Ho cercato in giro, e sono giunto alla conclusione che devo aggiungere un metodo pubblico Aggiungi (Object obj). Ora non sono veramente sicuro di cosa dovrebbe contenere questo metodo o quando viene chiamato, qualcuno può indicarmi la giusta direzione? Il metodo Aggiungi deve aggiungere manualmente ciascun appuntamento?
Alcuni link che ho trovato utile: here here
molto apprezzato.
Ah .. giusto. Ci proverò ora e tornerò da te. :) – LKB
Ho convertito gli appuntamenti di FindItemsResults in una lista e li ho serializzati. Tuttavia, ora sto ottenendo un'eccezione: ** Microsoft.Exchange.WebServices.Data.Appointment non può essere serializzato perché non ha un costruttore con parametri **. Qualche idea? –
LKB
Probabilmente stai ricevendo questo errore perché qualcosa nel grafico dell'oggetto FindItemsResults non è serializzabile direttamente con XmlSerializer. Puoi provare DataContractSerializer, che è un po 'più robusto, o coprire il grafico FindItemsResultsobject in un formato più semplice (DTO POCO) –