Поскольку Gary сказал в комментариях:
было бы хорошо, если Бегуну Единицы можно было бы сказать идти вперед и заказать им именем класса. Хм, возможно, я должен изучить исходный код...
я действительно смотрел, но нет никакой подсказки функциональности для сортировки этих имен. Я предложил бы запрос на изменение плагину JUnit, но я не думаю, что существует партия людей, использующих эту вещь, таким образом: сделай сам.
я хотел бы видеть решение, если Вы изменяете сменный код.
Прежде всего, остерегайтесь поиска старых примеров. Вы нашли тот, который использует XmlTextWriter
, который не рекомендуется в .NET 2.0. Вместо этого следует использовать XmlWriter.Create
.
Вот пример сериализации объекта в столбец XML:
public void SerializeToXmlColumn(object obj)
{
using (var outputStream = new MemoryStream())
{
using (var writer = XmlWriter.Create(outputStream))
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(writer, obj);
}
outputStream.Position = 0;
using (var conn = new SqlConnection(Settings.Default.ConnectionString))
{
conn.Open();
const string INSERT_COMMAND = @"INSERT INTO XmlStore (Data) VALUES (@Data)";
using (var cmd = new SqlCommand(INSERT_COMMAND, conn))
{
using (var reader = XmlReader.Create(outputStream))
{
var xml = new SqlXml(reader);
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@Data", xml);
cmd.ExecuteNonQuery();
}
}
}
}
}
Одна проблема с StringWriter
заключается в том, что по умолчанию он не позволяет вам устанавливать кодировку, которую он рекламирует - так что вы можете получить XML-документ, рекламирующий его кодировку как UTF-16, что означает, что вам нужно закодировать его как UTF-16, если вы записываете его в файл. У меня есть небольшой класс, который может помочь с этим:
public sealed class StringWriterWithEncoding : StringWriter
{
public override Encoding Encoding { get; }
public StringWriterWithEncoding (Encoding encoding)
{
Encoding = encoding;
}
}
Или, если вам нужен только UTF-8 (это все, что мне часто нужно):
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
Что касается того, почему вы не можете сохранить свой XML в базе данных - вы ' Если вы хотите, чтобы мы смогли диагностировать / исправить это, вам нужно будет сообщить нам более подробную информацию о том, что произошло, когда вы попытались это сделать.
t позволяет вам установить кодировку, которую он объявляет - так что вы можете получить XML-документ, рекламирующий его кодировку как UTF-16, что означает, что вам нужно закодировать его как UTF-16, если вы записываете его в файл. У меня есть небольшой класс, который может помочь с этим:public sealed class StringWriterWithEncoding : StringWriter
{
public override Encoding Encoding { get; }
public StringWriterWithEncoding (Encoding encoding)
{
Encoding = encoding;
}
}
Или, если вам нужен только UTF-8 (это все, что мне часто нужно):
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
Что касается того, почему вы не можете сохранить свой XML в базе данных - вы ' Если вы хотите, чтобы мы смогли диагностировать / исправить это, вам нужно будет сообщить нам более подробную информацию о том, что произошло, когда вы попытались это сделать.
t позволяет вам установить кодировку, которую он объявляет - так что вы можете получить XML-документ, рекламирующий его кодировку как UTF-16, что означает, что вам нужно закодировать его как UTF-16, если вы записываете его в файл. У меня есть небольшой класс, который может помочь с этим:public sealed class StringWriterWithEncoding : StringWriter
{
public override Encoding Encoding { get; }
public StringWriterWithEncoding (Encoding encoding)
{
Encoding = encoding;
}
}
Или, если вам нужен только UTF-8 (это все, что мне часто нужно):
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
Что касается того, почему вы не можете сохранить свой XML в базе данных - вы ' Если вы хотите, чтобы мы смогли диагностировать / исправить это, вам нужно будет сообщить нам более подробную информацию о том, что произошло, когда вы попытались это сделать.
При сериализации XML-документа в строку .NET необходимо установить кодировку UTF-16. Строки хранятся внутри как UTF-16, так что это единственная кодировка, которая имеет смысл. Если вы хотите хранить данные в другой кодировке, используйте вместо этого массив байтов.
SQL Server работает по аналогичному принципу; любая строка, передаваемая в столбец xml
, должна быть закодирована как UTF-16. SQL Server отклонит любую строку, в которой в объявлении XML не указан UTF-16. Если декларация XML отсутствует, то стандарт XML требует, чтобы по умолчанию использовался UTF-8, поэтому SQL Server также отклонит это.
Имея это в виду, вот некоторые служебные методы для выполнения преобразования.
public static string Serialize<T>(T value) {
if(value == null) {
return null;
}
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = new UnicodeEncoding(false, false), // no BOM in a .NET string
Indent = false,
OmitXmlDeclaration = false
};
using(StringWriter textWriter = new StringWriter()) {
using(XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings)) {
serializer.Serialize(xmlWriter, value);
}
return textWriter.ToString();
}
}
public static T Deserialize<T>(string xml) {
if(string.IsNullOrEmpty(xml)) {
return default(T);
}
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlReaderSettings settings = new XmlReaderSettings();
// No settings need modifying here
using(StringReader textReader = new StringReader(xml)) {
using(XmlReader xmlReader = XmlReader.Create(textReader, settings)) {
return (T) serializer.Deserialize(xmlReader);
}
}
}
]