将字符串格式化为XML以包含制表符,换行符等

时间:2012-02-11 02:47:10

标签: c# string xml-serialization

我将字符串从多行文本框序列化为XML。是发送换行符和制表符以保存在XML中,所以当我反序列化它时,我看到它看起来一样吗?

示例 - 文本框如下所示:

Hello JohnDoe,

     This is a message
...
Somelines....

Thank you,
...
End

当我对其进行序列化然后反序列化时,文本框将填充如下:

Hello JohnDoe,This is a message..Some lines....Thank you,...End

它不一定非常漂亮,我只是想找到一种更好的方式以更好的格式恢复它。感谢。

好的,所以我的代码如下:

public void SerializeToXML(List<Report> newReport)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Report>));

            //XmlWriterSettings serializer_settings = new XmlWriterSettings();
            //serializer_settings.Indent = true;
            //serializer_settings.NewLineOnAttributes = true;

            TextWriter textWriter = new StreamWriter(xmlPath);
            serializer.Serialize(textWriter, newReport);
            textWriter.Close();
        }

其中Report只是一个带有一些字符串属性的类。评论的线条是我试图实现目标的一些事情。

举报课程代码:

public class Report
    {
        public string name
        { get; set; }

        public string email
        { get; set; }

        public string defectID
        { get; set; }

        public string fixedBuild
        { get; set; }

        public string description
        { get; set; }

        [XmlIgnore]
        public string messageBody
        { get; set; }

     private static readonly XmlDocument _xmlDoc = new XmlDocument();

     [XmlElement("messageBody")]
     public XmlCDataSection TextCData
     {
         get
         {
             return _xmlDoc.CreateCDataSection(messageBody);
         }
         set
         {
             messageBody = value.Data;
         }
     }
    }

输出保持不变(没有空白格式)。

2 个答案:

答案 0 :(得分:3)

保留XML中所有空格的一种方法是使用CDATA部分。详细信息取决于序列化的方式。有关Web服务上下文中的说明,请参阅this question。如果手动序列化,请使用XmlWriter.WriteCData方法。

答案 1 :(得分:0)

article似乎提供了有效的解决方案。另请查看此答案here

如果没有看到您的代码,很难提供好的建议。

修改

您可以添加manually

或者你可能会遇到这样的事情(未经测试,从此question修改):

public class Report
{
    [XmlAttribute("xml:space")]
    public string spacing = "preserve";
}

这样它应该在序列化过程中自动添加。但是,如果你能找到一种方法来设置一个不基于字段或属性的XmlAttribute,那就更好了。