サンプル コードを変更して、コードを C# 開発環境に簡単に配置できるようにしました。また、意図的に using ステートメントを含めていません。これは単なるサンプル コードです。
この例では、シリアライズしたい次のクラスがあります。
public class DataToSerialize
{
public string Name { get; set; }
}
「Same」が出力される行を説明する方法でこれをシリアル化および逆シリアル化しようとすると、実行されません (コードが Environment.NewLine を使用して Windows で実行されると仮定し、「\r\n」に置き換えます)そうでない場合):
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");
}
ただし、これは、XmlTextReader を手動でシリアライザーに割り当て、Normalization プロパティを false に設定することで修正できます (シリアライザーで既定で使用されるプロパティは true に設定されています)。
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");
}
同じものが印刷されますが、私が間違っていない限り、あなたが必要とする動作は何ですか?