XML反序列化C#,换行符\n替换为\\n

XML Deserialization C#, newline character \n is replaced with \\n

我正在尝试反序列化一个简单的 Xml 文档。

<?xml version="1.0" encoding="utf-8"?>
<data>
   <somedata> Data1\nData2\n </somedata>
</data>

这是我的职责。

public class DataTry
{
    public static string deserialize()
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(Data));
        TextReader reader = new StreamReader(@"D:\myfile.xml");
        object obj = deserializer.Deserialize(reader);
        Data XmlData = (Data)obj;
        reader.Close();
        return XmlData.somedata;
    }

    [Serializable, XmlRoot("data")]
    public class Data
    {
        [XmlElement("somedata")]
        public string somedata { get; set; }
    }
}

我得到的结果是Data1\\nData2\\n。 我不希望将换行符 \n 替换为 \\n.

这符合预期。

您的字符串是 Data1\nData2\n\n这里不是换行符,是文字串\n。当您在调试器中查看它时,您将看到它的转义形式 \n.

如果您希望这实际上是一个换行符,则必须取消转义您的字符串。一种方法是使用 Regex.Unescape:

var escaped = @"Data1\nData2\n";        
var unescaped = Regex.Unescape(escaped);

查看此演示:https://dotnetfiddle.net/VWphvG

请注意,此方法旨在反转义正则表达式,因此反转义的不仅仅是标准字符。您可以在 this related question

中看到一些其他选项