2
using System.ComponentModel;
using System.IO;
using System.Xml.Serialization;
namespace SerializerTest {
static class Program {
static void Main() {
using (TextWriter textWriter = new StreamWriter("data.xml")) {
Data data = new Data();
new XmlSerializer(typeof(Data)).Serialize(textWriter, data);
textWriter.Close();
}
using (TextWriter textWriter = new StreamWriter("exData.xml")) {
ExData exData = new ExData();
new XmlSerializer(typeof(ExData)).Serialize(textWriter, exData);
textWriter.Close();
}
}
}
public class Data {
[DefaultValue(10)] public int A { get; set; }
public Data() { A = 10; }
}
public class ExData : Data {
[DefaultValue(20)] public new int A { get; set; }
public ExData() { A = 20; }
}
}
當第一序列是如我期望(默認值的非串行化):爲什麼XMLSerializer的取基類的默認值屬性來序列
<?xml version="1.0" encoding="utf-8" ?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
第二結果:
<?xml version="1.0" encoding="utf-8"?>
<ExData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<A>20</A>
</ExData>
顯然,XmlSerializer接受基類的默認值,而不是接受新的值。使用「覆蓋」來覆蓋虛擬屬性會得到相同的結果。 將ExData的屬性A的初始化更改爲10將導致無法序列化此屬性,就好像應用了基類屬性的默認值一樣。 有人可以向我解釋這種行爲嗎? 有沒有人知道這個工作?
我的目標是非序列化默認值,但更改派生類的默認值。
不是一個好的選擇。特別是因爲這個bug是類獨立的,並且IXMLSerializable實現不會。是否可以重寫XMLSerializer而不重寫所有內容? – Ingo