piszę typowych funkcji serializacji dany obiekt i Lista <obiekt> następująco grzywnyJak serializacji z wykazu <object>
public string SerializeObject(Object pObject)// for given object
{
try
{
String XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(pObject));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
catch (Exception e) { System.Console.WriteLine(e); return null; }
}
public string SerializeObject(List<Object> pObject)// for given List<object>
{
try
{
String XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(pObject));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
catch (Exception e) { System.Console.WriteLine(e); return null; }
}
pierwszy działa. Jeśli przekażę dowolny typ, pomyślnie zwraca ciąg xml.
KOREKTA: Błąd kompilacji wystąpił na drugim (błąd. Nie można przekonwertować z List<MyType>
do List<object>
ja przepisać drugi w następujący sposób, który rozwiązuje mój problem teraz jest szeregowania daną List<generic types>
private string SerializeObject<T>(T source)
{
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, source);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
string XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
@afin: może nie zdawałeś sobie sprawy, ale nie powinieneś już używać 'nowego XmlTextWriter()'. Został przestarzały na rzecz 'XmlWriter.Create()'. Od .NET 2.0. –
@john: dziękuję – afin
Możesz sprawdzić Fasterflect (http://fasterflect.codeplex.com), który zawiera metodę rozszerzenia Toxml dla obiektów. Jest tylko w jedną stronę i może nie być tym, czego potrzebujesz, ale będzie działać praktycznie dla każdego obiektu. –