dotnet C# 序列化 XML 時進行自動格式化


默認的序列化對象為 XML 字符串時,是沒有進行格式化的,也就是所有的內容都在相同的一行。本文告訴大家方法,在序列化對象時,轉換的 XML 是格式化的。或者說拿到 XML 字符串,對這個 XML 字符串進行格式化

在序列化某個對象的時候,序列化出來的 XML 進行格式化,可以在創建的 XmlWriter 傳入 XmlWriterSettings 設置 Indent 屬性,如下面代碼

        public static string Serialize<T>(T obj)
        {
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");

            var xmlSerializer = new XmlSerializer(typeof(T));
            var stringBuilder = new StringBuilder();

            using (var xmlWriter = XmlWriter.Create(new StringWriter(stringBuilder), new XmlWriterSettings
                {
                    Indent = true
                }))
            {
                xmlSerializer.Serialize(xmlWriter, obj, ns);
            }

            return stringBuilder.ToString();
        }

上面代碼的 XmlSerializerNamespaces 是為了去掉 XML 的命名空間

此時序列化出來的內容將會是格式化的

對於現有的 XML 文件或 XML 字符串,進行格式化,方法是先讀取出來,然后再次寫入,寫入時設置格式化

                    var xmlString = File.ReadAllText(xmlFile);
                    XmlDocument document = new XmlDocument();
                    document.LoadXml(xmlString);

                    using var fileStream = new FileStream(xmlFile, FileMode.Create, FileAccess.Write);
                    fileStream.SetLength(0);

                    using var xmlWriter = XmlWriter.Create(fileStream, new XmlWriterSettings()
                    {
                        Indent = true
                    });
                    document.WriteTo(xmlWriter);

上面代碼的 xmlFile 是一個存放在本地的文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM