DataContractSerializer - how can I output the xml to a string (as opposed to a file)

后端 未结 5 1667
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-31 15:23

I had a quick question regarding the datacontractserializer. Maybe it\'s more of a stream question. I found a piece of code that writes the xml to a filestream. I basically don\

相关标签:
5条回答
  • 2021-01-31 15:41

    And even easier:

    var serializer = new DataContractSerializer(typeof(T));
    var sb = new StringBuilder();
    using (var writer = XmlWriter.Create(sb))
    {
        serializer.WriteObject(writer, objectToSerialize);
        writer.Flush();
        return sb.ToString();
    }
    
    0 讨论(0)
  • 2021-01-31 15:42

    Thanks to @xr280xr for pointing out my forgotten StringWriter disposal in the first draft.

    /// <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();
        }
    }
    
    0 讨论(0)
  • 2021-01-31 15:59

    I suggest combining the methods given by Pat and marc_s:

    public static string DataContractSerializeObject<T>(T objectToSerialize)
    {
        using (var output = new StringWriter())
        using (var writer = new XmlTextWriter(output) {Formatting = Formatting.Indented})
        {
            new DataContractSerializer(typeof (T)).WriteObject(writer, objectToSerialize);
            return output.GetStringBuilder().ToString();
        }
    }
    
    0 讨论(0)
  • 2021-01-31 16:00

    A variant of @root's answer:

    var serializer = new DataContractSerializer(typeof(T));
    var sb = new StringBuilder();
    using (var writer = XmlWriter.Create(sb))
    {
        serializer.WriteObject(writer, objectToSerialize);
    }
    
    return sb.ToString();
    
    0 讨论(0)
  • 2021-01-31 16:04

    Something like this - put your output into a MemoryStream and then read that back in:

    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;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题