c# DataContractSerializer द्वारा बनाए गए एक्सएमएल का स्वरूपण




xml formatting (4)

क्या डेटाकंट्रैक्टसेरियलाइज़र को प्रारूपित एक्सएमएल को थूकने के बजाय एक लंबी स्ट्रिंग प्राप्त करने का कोई आसान तरीका है? मैं किसी भी तरह से टैग या सामग्री को बदलना नहीं चाहता हूं, क्या एक्सएमएल को और अधिक पठनीय बनाने के लिए बस लाइन ब्रेक और इंडेंटेशन जोड़ना है?

<tagA>
   <tagB>This is</tagB>   
   <tagC>Much</tagC>
   <tagD>
      <tagE>easier to read</tagE>
   </tagD>
</tagA>


<tagA><tagB>This is</tagB><tagC>Much</tagC><tagD><tagE>harder to read</tagE></tagD></tagA>

XmlWriterSettings की Indent प्रॉपर्टी पर एक नज़र डालें

अपडेट करें: एमएसडीएन से कैसे एक अच्छा लिंक यहां है : XmlWriter पर आउटपुट प्रारूप निर्दिष्ट करें

इसके अतिरिक्त, यहां एक नमूना है:

class Program
{
    static void Main(string[] args)
    {
        var Mark = new Person()
        {
            Name = "Mark",
            Email = "[email protected]"
        };

        var serializer = new DataContractSerializer(typeof(Person));

        var settings = new XmlWriterSettings()
        {
            Indent = true,
            IndentChars = "\t"
        };

        using (var writer = XmlWriter.Create(Console.Out, settings))
        {
            serializer.WriteObject(writer, Mark);
        }
        Console.ReadLine();
    }
}
public class Person
{
    public string Name { get; set; }
    public string Email { get; set; }
}

XML दस्तावेज़ों में व्हाइटस्पेस समायोजित करने के बारे में सावधान रहें! व्हाइटस्पेस को समायोजित करने से एक्सएमएल हमारे लिए मनुष्यों को अधिक पठनीय बना देगा, लेकिन यह मशीन पार्सिंग में हस्तक्षेप कर सकता है।

एक्सएमएल मानक के अनुसार, व्हाइटस्पेस डिफ़ॉल्ट रूप से महत्वपूर्ण है। दूसरे शब्दों में, जहां तक ​​एक्सएमएल का संबंध है, सफेद स्थान सामग्री है

यदि आप अपने अच्छी तरह से स्वरूपित एक्सएमएल को एक्सएमएल दस्तावेज़ ऑब्जेक्ट में खिलाते हैं, तो आपको उस संस्करण के मुकाबले एक अलग परिणाम मिलेगा जिसमें इसमें कोई रिक्त स्थान या लाइन ब्रेक नहीं है। आपको प्रारूप में जोड़े गए अतिरिक्त टेक्स्ट नोड्स मिलेगा जिन्हें प्रारूपित किया गया है।

एक्सएमएल व्हाइट स्पेस पर इस एमएसडीएन आलेख में कई उदाहरण हैं जो दिखाते हैं कि कितनी मुश्किल सफेद जगह हो सकती है।

यदि आप केवल मानव उपभोग के लिए एक्सएमएल स्वरूपित कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता। लेकिन यदि आप अपने स्वरूपित दस्तावेज़ को राउंड-ट्रिप करने का प्रयास करते हैं, तो आप परेशानी में भाग सकते हैं।

चूंकि DataContractSerializer का उपयोग करने के प्रमुख प्राथमिक लाभों में से एक ऑब्जेक्ट को क्रमबद्ध करने और एक्सएमएल को निर्बाध रूप से deserialize करने की क्षमता है, आमतौर पर बदसूरत आउटपुट अकेले छोड़ना सबसे अच्छा है।

मैं आमतौर पर आउटपुट को नोटपैड ++ में पेस्ट करता हूं और जब मैं इसे डिबगिंग उद्देश्यों के लिए पढ़ना चाहता हूं तो उस पर एक XML-tidy मैक्रो चलाएं।


जैसा कि बेंडवे कहते हैं, XmlWriterSettings आपको चाहिए - उदाहरण के लिए कुछ

var ds = new DataContractSerializer(typeof(Foo));

var settings = new XmlWriterSettings { Indent = true };

using (var w = XmlWriter.Create("fooOutput.xml", settings))
    ds.WriteObject(w, someFoos);

    public static string SerializeEntity<T>(T source)
    {
        using (MemoryStream ms = new MemoryStream())
        {

                NetDataContractSerializer serializer = new NetDataContractSerializer();
                serializer.Serialize(ms, source);
                return System.Text.Encoding.ASCII.GetString(ms.ToArray());

        }
    }

    public static T DeSerializeEntity<T>(string xml)
    {
        using (MemoryStream ms = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(xml)))
        {
                NetDataContractSerializer serializer = new NetDataContractSerializer();
                return (T)serializer.Deserialize(ms);
        }
    }




datacontractserializer