我正在尝试反序列化一个简单的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。
答案 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
中查看其他一些选项