オブジェクトを XML としてシリアル化しようとしていますが、小さなテスターを使用して、XML としてシリアル化するときのさまざまなオブジェクトの動作を実験しています。バイナリ シリアライザーが深く、XML が浅いことはわかっています。ただし、XML を使用する場合、別のオブジェクト内で構成された List をシリアル化しようとするようです。
私の問題は、リストをシリアル化するときにコピーされたデータを取得することです。コードと出力は次のとおりです。
class Program
{
static void Main(string[] args)
{
TestSerializer original = new TestSerializer();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(original.GetType());
x.Serialize(Console.Out, original);
Console.WriteLine("\n\n\n");
using (MemoryStream stream = new MemoryStream())
{
x.Serialize(stream, original);
stream.Seek(0, SeekOrigin.Begin);
TestSerializer copy = x.Deserialize(stream) as TestSerializer;
x.Serialize(Console.Out, copy);
}
Console.ReadLine();
}
}
public class TestSerializer
{
public List<string> words = new List<string>();
public TestSerializer()
{
words.Add("word");
words.Add("anotherword");
}
}
対応する出力:
<?xml version="1.0" encoding="IBM437"?>
<TestSerializer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=
"http://www.w3.org/2001/XMLSchema">
<words>
<string>word</string>
<string>anotherword</string>
</words>
</TestSerializer>
<?xml version="1.0" encoding="IBM437"?>
<TestSerializer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=
"http://www.w3.org/2001/XMLSchema">
<words>
<string>word</string>
<string>anotherword</string>
<string>word</string>
<string>anotherword</string>
</words>
</TestSerializer>
ご覧のとおり、"original" をシリアル化するとリストの内容が 2 倍になり、次に "copy" に逆シリアル化されます。これに関する限り、私が見逃しているものはありますか?重複データがあってはならないようです。