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

时间:2015-08-05 10:05:06

标签: c# xml xml-serialization

我正在尝试反序列化一个简单的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。

1 个答案:

答案 0 :(得分:1)

这表现得如预期。

您的字符串为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

中查看其他一些选项