c# DataContractSerializer-मैं xml को स्ट्रिंग में कैसे आउटपुट कर सकता हूं(एक फ़ाइल के विपरीत)




xml-serialization stream (4)

पहले मसौदे में मेरे भूल गए स्ट्रिंगराइटर निपटान को इंगित करने के लिए @ xr280xr का धन्यवाद।

/// <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();
    }
}

मेरे पास datacontractserializer के बारे में एक त्वरित प्रश्न था। शायद यह एक धारा का सवाल है। मुझे कोड का एक टुकड़ा मिला, जो xml को फिलस्ट्रीम में लिखता है। मुझे मूल रूप से फ़ाइल नहीं चाहिए और बस स्ट्रिंग आउटपुट की आवश्यकता है।

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();
}

fs.ToString () स्पष्ट रूप से वह नहीं है जिसकी मुझे तलाश है। क्या धारा या लेखक आदि, क्या मैं उचित स्ट्रिंग को वापस करने और फ़ाइल बनाने के लिए उपयोग नहीं कर सकता हूं मैंने XML को फिल्माया गया बनाया पर देखा और यह वही है जो मैं देख रहा हूं। 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;
        }
    }
}

मैं Pat और 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();
    }
}

और भी आसान:

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();
}






datacontractserializer