DataContractSerializer - как я могу произвести xml к строке (в противоположность файлу)

У меня был быстрый вопрос относительно 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 в этом случае. Кто-либо может указать на меня в правильном направлении?

39
задан ROMANIA_engineer 12 December 2017 в 22:20
поделиться

2 ответа

Что-то вроде этого - поместите ваш вывод в 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;
        }
    }
}
67
ответ дан 27 November 2019 в 02:08
поделиться

Спасибо @ 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();
    }
}
27
ответ дан 27 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: