首页 > 学院 > 开发设计 > 正文

诡异的XmlSerializer属性字段Specified

2019-11-14 13:56:00
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表