Wenn Sie diesen Code ausführen:XmlSerializer unzuverlässig oder mache ich etwas falsch?
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);
}
}
}
Der Ausgang wird 13, 10. Die XmlSerializer
den Wagenrücklauf zu entfernen. Dies ist ein Problem in meinem Fall, weil ich Zeichenfolgen für die Gleichheit in einer Klasse vergleichen muss, die serialisiert und deserialisiert wird, und dies verursacht zwei Strings, die gleich sind, bevor die Serialisierung nach der Serialisierung ungleich ist. Was wäre die beste Arbeit um?
Edit: Nach dem Lesen Antworten, das ist meine Lösung für den Fall war, wird es jemand helfen:
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);
}
}
}
Haben Sie bedeuten, dass, wenn mein Text sei '„Hallo“' es würde als "Hallo" 'serialisiert werden? Ich habe es gerade getestet und die weißen Bereiche serialisiert. Ich überprüfe trotzdem deinen Link. – Juan
Aus dem Speicher serialisiert es OK, aber es ist erlaubt, Whitespace zu entfernen, wenn es deserialisiert. –
Das wird mein Problem lösen ... aber Wagenrücklauf ist und nicht wie in dieser Antwort angegeben. – Juan