自动生成代码时,往往会为一个字段假设为 * , 生成另一个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。

posted on 2015-10-08 17:46  涂宏亮  阅读(786)  评论(1编辑  收藏  举报