2013-02-05 57 views
2

ServiceStack.Text是否可以縮進它的xml輸出,所以它不是一個長長的xml行?我們希望將輸出寫入易於閱讀的文本文件。ServiceStack.Text xml序列化格式良好的輸出

+0

我不建議額外的數據是好的或可讀的數據,那麼爲什麼不使用XSLT? – 2013-06-27 16:07:33

回答

2

你使用的是任何一種編碼。因爲默認情況下,當你序列化你的對象時,不會發生任何縮進剝離。嘗試下面的代碼。

你的XML類對象

public class MyXMLClass 
{ 
    [XmlElement] 
    public string[] Property1 { get; set; } 
    [XmlElement] 
    public string[] Property2 { get; set; } 
}  

Serialize方法

static void TestXMLWithIndent() 
    { 
     var x = new MyXMLClass() 
     { 
      Property1 = new string[] { "TestProp11", "TestProp12", "TestProp13" }, 
      Property2 = new string[] { "TestProp21", "TestProp22", "TestProp23" } 
     }; 
     var filename = @"c:\temp\testxmlWithIndent.oxi"; 
     using (TextWriter textWriter = new StreamWriter(filename)) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(MyXMLClass)); 
      serializer.Serialize(textWriter, x); 
      textWriter.Close(); 
     } 
    } 

此代碼產生正確的縮進。而下面的代碼會生成沒有縮進的xml文件,如您所述。請注意,當我使用xmltextwriter時,我必須使用編碼。

static void XmlWithNoIndent() 
    { 
     var x = new MyXMLClass() 
     { 
      Property1 = new string[] { "TestProp11", "TestProp12", "TestProp13" }, 
      Property2 = new string[] { "TestProp21", "TestProp22", "TestProp23" } 
     }; 
     var filename = @"c:\temp\testxmlWithNoIndent.oxi"; 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      using (var xmlTextWriter = new System.Xml.XmlTextWriter(memoryStream, Encoding.Unicode)) 
      { 
       XmlSerializer xs = new XmlSerializer(typeof(MyXMLClass)); 
       xs.Serialize(xmlTextWriter, x); 

       MemoryStream memoryBaseStream; 
       memoryBaseStream = (MemoryStream)xmlTextWriter.BaseStream; 
       UTF8Encoding encoding = new UTF8Encoding(); 
       File.WriteAllBytes(filename, memoryStream.ToArray()); 
       memoryBaseStream.Dispose(); 
       xmlTextWriter.Close(); 
       memoryStream.Close(); 
      } 
     } 
    }