簡體   English   中英

為什么XMLSerializer使用基類的DefaultValue屬性進行序列化

[英]Why does XMLSerializer take DefaultValue Attribute of base class to serialize

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; }
}

}

雖然第一次序列化是我所期望的(默認值的非序列化):

<?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會導致未序列化此屬性,就像應用基類屬性的默認值一樣。 有人可以向我解釋這種行為嗎? 有人知道解決此問題的方法嗎?

我的目標是非序列化默認值,但更改派生類的默認值。

XmlSerializer似乎只獲得第一個DefaultValueAttribute ,但不幸的是,我認為沒有直接的替代方法可以解決您所需要的問題。 但是,您可以實現IXmlSerializable並自己做這種事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM