У меня был быстрый вопрос относительно datacontractserializer. Возможно, это - больше вопроса о потоке. Я нашел часть кода, который пишет xml в filestream. Я в основном не хочу файл и просто нуждаюсь в строковом выводе.
public static string DataContractSerializeObject<T>(T objectToSerialize)
{
var fs = new FileStream("test.xml", FileMode.OpenOrCreate);
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(fs, objectToSerialize);
fs.Close();
return fs.ToString();
}
фс. ToString (), очевидно, не, что я ищу. Какой поток или устройство записи и т.д., я могу использовать только, чтобы возвратить соответствующую строку и не создать файл? Я действительно смотрел на XML созданный filestream, и это точно, что я ищу. XmlSerializer записал немного странное XML, и я предпочитаю вывод DataContractSerializer в этом случае. Кто-либо может указать на меня в правильном направлении?
Что-то вроде этого - поместите ваш вывод в MemoryStream
и затем прочитайте его обратно:
public static string DataContractSerializeObject<T>(T objectToSerialize)
{
using(MemoryStream memStm = new MemoryStream())
{
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(memStm, objectToSerialize);
memStm.Seek(0, SeekOrigin.Begin);
using(var streamReader = new StreamReader(memStm))
{
string result = streamReader.ReadToEnd();
return result;
}
}
}
Спасибо @ xr280xr за указание на мое забытое избавление от StringWriter в первом черновике.
/// <summary>
/// Converts this instance to XML.
/// </summary>
/// <returns>XML representing this instance.</returns>
public string ToXml()
{
var serializer = new DataContractSerializer(this.GetType());
using (var output = new StringWriter())
using (var writer = new XmlTextWriter(output) { Formatting = Formatting.Indented })
{
serializer.WriteObject(writer, this);
return output.GetStringBuilder().ToString();
}
}