Ich habe den Beispielcode ändern zu erleichtern, um schnell den Code in eine C# Entwicklungsumgebung zu setzen. Ich habe auch bewusst keine Anweisungen verwendet - es ist nur Beispielcode.
Für das Beispiel wir die Folge Klasse wünschen wir serialisiert:
public class DataToSerialize
{
public string Name { get; set; }
}
Wenn wir dies versuchen, serialisiert und deserialisiert in der Art und Weise Sie die Linie beschreiben, wo „Same“ ausgedruckt wird nicht ausgeführt werden sollen (ich gehe davon aus dem Code wird mit Environment.NewLine unter Windows ausführen, ersetzen mit „\ r \ n“, wenn Sie nicht sind):
DataToSerialize test = new DataToSerialize();
test.Name = "TestData" + Environment.NewLine;
XmlSerializer configSerializer = new XmlSerializer(typeof(DataToSerialize));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
configSerializer.Serialize(sw, test);
ms.Position = 0;
DataToSerialize deserialized = (DataToSerialize)configSerializer.Deserialize(ms);
if (deserialized.Name.Equals("TestData" + Environment.NewLine))
{
Console.WriteLine("Same");
}
jedoch kann dieses Problem behoben werden, indem manuell eine XmlTextReader auf die Zuweisung von Serialisierer, dessen Eigenschaft Normalization auf false gesetzt ist d standardmäßig in der Serializer auf true gesetzt):
DataToSerialize test = new DataToSerialize();
test.Name = "TestData" + Environment.NewLine;
XmlSerializer configSerializer = new XmlSerializer(typeof(DataToSerialize));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
configSerializer.Serialize(sw, test);
ms.Position = 0;
XmlTextReader reader = new XmlTextReader(ms);
reader.Normalization = false;
DataToSerialize deserialized = (DataToSerialize)configSerializer.Deserialize(reader);
if (deserialized.Name.Equals("TestData" + Environment.NewLine))
{
Console.WriteLine("Same");
}
Same wird nun ausdrucken, die es sei denn, ich bin falsch ist das Verhalten, das Sie benötigen?
Ich mag das; -p –
Für den Rekord, macht das Fehlen von Anweisungen in Beispielcode es schwieriger zu lesen meiner Meinung nach ... nichts falsch mit der Verwendung. –
@ Matthew - ich denke, es ist eines dieser subjektiven Dinge - zu beweisen, dass man besser ist als das andere, das man wirklich braucht, um ein kontrolliertes Experiment durchzuführen. Mit meiner Antwort ist es ein wenig merkwürdig, da der MemoryStream sowohl auf die Serialisierung als auch auf die Deserialisierung beschränkt werden muss, was in der realen Welt nicht passieren würde. Im Falle Ihrer Frage ist die Verwendung von Aussagen nützlich (meiner Meinung nach). Als ich den Code schrieb, habe ich tatsächlich die using-Anweisungen eingefügt, aber beim Veröffentlichen der Antwort herausgerissen (mein Gehirn ist so verkabelt, dass sich FXCop nicht beschweren). – RichardOD