C# 将字符串格式化为XML,包括制表符、换行符等

C# 将字符串格式化为XML,包括制表符、换行符等,c#,string,xml-serialization,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 它不一

我正在将多行文本框中的字符串序列化为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();
        }

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

在XML中保留所有空白的一种方法是使用
CDATA
部分。详细信息取决于序列化的方式。有关web服务上下文中的说明,请参见。如果手动序列化,请使用方法。

这似乎提供了一个有效的解决方案。也看看这个答案

在没有看到代码的情况下很难给出好的建议

编辑

你可以加上它

或者,您也可以通过类似的方式(未经测试、修改):


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

嗯,好的,我已经编辑了我的类以使用CDATA格式。输出没有变化。有什么想法吗?我还认为这个问题可能是因为我将XML反序列化为列表,然后是文本框(因为XML中有多个报告。但是查看XML文件本身(在反序列化之前,我发现格式仍然被忽略)@ikathegreat如果CDATA节未出现,则说明您所做的更改不正确。请尝试编写一个小型自包含测试项目,将单个元素写入包含CDATA节的XML。有关如何执行此操作的其他信息,请参阅。尝试第二个(不接受)首先回答,如果不起作用,则回答被接受的答案。为了保留空白,其中一篇文章建议
xml:space=“preserve”
。我不确定这会发生在哪里,或者如何在xml中获取它…?在序列化过程中?
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;
         }
     }
    }
public class Report
{
    [XmlAttribute("xml:space")]
    public string spacing = "preserve";
}