自動生成代碼時,往往會為一個字段假設為 * , 生成另一個bool型字段: *Specified;
如:
[Serializable]
public class A
{
[xmlElement]
public string Id { get; set; }
[XmlIgnore]
public bool IdSpecified { get; set; }
}
這種寫法會導致XmlSerializer使用不便
具體的在XmlSerializer 表現的問題是:
當我們為 A類型賦值時,
A a =new A();
a.Id = “test”;
不管怎么賦值,序列化后的XML 里都不會有<Id></Id>這個節點。
除非,你把 IdSpecified 設置為 true.
這個問題也告訴大家要注意:
以后別創建 *Specified 這樣的bool字段。省得引起 非常詭異的錯誤。
解決方案:
(1)契約中最好不要用Specified這個字段。
(2)對于已經形成的契約,在設置這些字段時,要把Specified設置為true。
新聞熱點
疑難解答