Ich bin derzeit auf der Suche nach einer einfachen Möglichkeit zum Serialisieren von Objekten (in C# 3).Verwenden von StringWriter für XML-Serialisierung
gegoogelt ich einige Beispiele und kam mit so etwas wie oben:
MemoryStream memoryStream = new MemoryStream ();
XmlSerializer xs = new XmlSerializer (typeof (MyObject));
XmlTextWriter xmlTextWriter = new XmlTextWriter (memoryStream, Encoding.UTF8);
xs.Serialize (xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());
Nach der Lektüre dieses question Ich habe mich gefragt, warum mit String nicht? Es scheint viel einfacher.
XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Ein weiteres Problem war, dass das erste Beispiel XML erzeugt konnte ich nicht nur schreiben in eine XML-Spalte von SQL Server 2005 DB.
Die erste Frage ist: Gibt es einen Grund, warum ich StringWriter nicht verwenden sollte, um ein Objekt zu serialisieren, wenn ich es danach als String brauche? Ich habe nie ein Ergebnis mit StringWriter beim googlen gefunden.
Die zweite ist natürlich: Wenn Sie es nicht mit StringWriter tun sollten (aus welchen Gründen auch immer), was wäre ein guter und korrekter Weg?
Zusatz:
Wie bereits von beiden Antworten erwähnt wurde, werde ich weiter in die XML gehe Problem DB.
Wenn in die Datenbank zu schreiben habe ich die folgende Ausnahme:
System.Data.SqlClient.SqlException: XML-Analyse: Zeile 1, Zeichen 38, nicht in der Lage, die Codierung zu wechseln
Bei String
<?xml version="1.0" encoding="utf-8"?><test/>
nahm ich die Zeichenfolge des XmlTextWriter erstellt und nur als xML th setzen ehe. Dieser hat nicht funktioniert (weder beim manuellen Einfügen in die DB).
Danach versuchte ich manuell einfügen (nur schreiben INSERT INTO ...) mit encoding = "utf-16", die auch fehlgeschlagen. Entfernen der Codierung total funktioniert dann. Nach diesem Ergebnis bin ich zurück zum StringWriter-Code und voila - es hat funktioniert.
Problem: Ich verstehe nicht wirklich warum.
bei Christian Hayter: Mit diesen Tests bin ich nicht sicher, ob ich utf-16 verwenden muss, um in die DB zu schreiben. Würde die Codierung nicht auf UTF-16 (im XML-Tag) eingestellt?
Ich bin Persönliche Erfahrung: SQL Server akzeptiert nur UTF-16, und wenn Sie etwas anderes übergeben, sind Sie dem SQL Server-XML-Parser und seinen Versuchen, die Daten zu konvertieren, ausgeliefert, anstatt nach einer Möglichkeit zu suchen, sie zu täuschen Ich übergebe es einfach UTF-16 direkt, was immer funktioniert. –
Wie schreibt man dies in die Datenbank? Übergeben Sie es eine Zeichenfolge oder ein Array von Bytes oder Schreiben in einen Stream? Wenn es eine der letzteren ist Bei zwei Formularen müssen Sie sicherstellen, dass Ihre deklarierte Codierung mit der tatsächlichen Codierung Ihrer Binärdaten übereinstimmt: –
Puh. Der manuelle Versuch, den ich als Abfrage im MS SQL Management Studio gemacht habe. Die "codierten" Versuche wurden in einen String geschrieben, der dann an einen O/R-Mapper übergeben wurde, der als String schreibt (soweit ich folgen konnte). Tatsächlich übergebe ich es die Zeichenfolge, die in den beiden Beispielen in meiner Frage erstellt wurde. – StampedeXV