C# XmlSerializer不可靠还是我做错了什么?
如果运行此代码:C# XmlSerializer不可靠还是我做错了什么?,c#,.net,serialization,xml-serialization,C#,.net,Serialization,Xml Serialization,如果运行此代码: public class Program { public class MyClass { public string Text { get; set; } } static MyClass myClass = new MyClass(); static string Desktop = "C:\\Users\\Juan Luis\\Desktop\\"; static void Main(string[] a
public class Program
{
public class MyClass
{
public string Text { get; set; }
}
static MyClass myClass = new MyClass();
static string Desktop = "C:\\Users\\Juan Luis\\Desktop\\";
static void Main(string[] args)
{
myClass.Text = "\r\nhello";
Console.WriteLine((int)myClass.Text[0]);
Save(Desktop + "file.xml", myClass);
myClass = Load(Desktop + "file.xml");
Console.WriteLine((int)myClass.Text[0]);
Console.Read();
}
private static MyClass Load(string fileName)
{
MyClass result = null;
using (Stream stream = File.Open(fileName, FileMode.Open))
{
XmlSerializer xmlFormatter = new XmlSerializer(typeof(MyClass));
result = (MyClass)xmlFormatter.Deserialize(stream);
}
return result;
}
private static void Save(string fileName, MyClass obj)
{
using (Stream tempFileStream = File.Create(fileName))
{
XmlSerializer xmlFormatter = new XmlSerializer(typeof(MyClass));
xmlFormatter.Serialize(tempFileStream, obj);
}
}
}
输出将为13、10。XmlSerializer
正在删除回车符。在我的例子中,这是一个问题,因为我需要在序列化和反序列化的类中比较相等的字符串,这会导致序列化之前相等的两个字符串在序列化之后不相等。最好的工作是什么
编辑:阅读答案后,这是我的解决方案,以防对任何人都有帮助:
public class SafeXmlSerializer : XmlSerializer
{
public SafeXmlSerializer(Type type) : base(type) { }
public new void Serialize(Stream stream, object o)
{
XmlWriterSettings ws = new XmlWriterSettings();
ws.NewLineHandling = NewLineHandling.Entitize;
using (XmlWriter xmlWriter = XmlWriter.Create(stream, ws))
{
base.Serialize(xmlWriter, o);
}
}
}
我不会确切地说它不可靠:
XmlSerializer
在元素中的文本周围去除空白。如果它不这样做,那么XML文档的含义将根据您在IDE中格式化它们的方式而改变
<>你可以考虑把文本放在一个CDATA部分中,这样可以准确地保存内容。比如说,
编辑:这似乎对问题所在有了更好的解释,还有一个更简单的解决方案-您的意思是,如果我的文本是
“hello”
,它将被序列化为“hello”
?我刚刚测试了它,它确实序列化了空格。无论如何我都会检查你的链接。从内存来看,它可以序列化,但在反序列化时允许去掉空白。这将解决我的问题。。。但是回车是
;而不是
;如答案中所述。我还需要做些什么来确保我的字符串在反序列化后保持相等?