В настоящее время я ищу простой способ сериализации объектов (в С# 3).
Я просмотрел несколько примеров и придумал что-то вроде:
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());
После прочтения этого question я спросил себя: почему бы не использовать StringWriter? Это кажется намного проще.
XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Другая проблема заключалась в том, что первый пример, сгенерированный XML, я не мог просто записать в столбец XML базы данных SQL Server 2005.
Первый вопрос: есть ли причина, по которой я не должен использовать StringWriter для сериализации объекта, когда мне это понадобится после строки? Я никогда не нашел результат, используя StringWriter при поиске в Google.
Во-вторых, конечно: если вы не должны делать это с помощью StringWriter (по каким-либо причинам), что было бы правильным и правильным способом?
Дополнение:
Как уже упоминалось в обоих ответах, я продолжу рассмотрение проблемы XML-DB.
При записи в базу данных я получил следующее исключение:
System.Data.SqlClient.SqlException: Разбор XML: строка 1, символ 38, невозможно переключить кодировку
Для строки
<?xml version="1.0" encoding="utf-8"?><test/>
Я взял строку, созданную из XmlTextWriter, и просто разместил ее как xml. Это не сработало (ни с ручным введением в БД).
Впоследствии я попробовал ручную вставку (просто запись INSERT INTO...) с кодировкой = "utf-16", которая также не удалась. После этого полностью удаляется кодировка. После этого я переключился на код StringWriter и вуаля - он работал.
Проблема: я действительно не понимаю, почему.
Кристиан Хейтер: С этими тестами я не уверен, что мне нужно использовать utf-16 для записи в БД. Не назначил ли кодирование UTF-16 (в теге xml)?