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