当前位置:  开发笔记 > 编程语言 > 正文

奇怪的.Net序列化问题

如何解决《奇怪的.Net序列化问题》经验,为你挑选了1个好方法。

当我试图序列化一个对象时,我今天遇到了一个奇怪的问题.该对象是通过Web服务(svcutil.exe)中的"添加服务引用"生成的.

问题是以下属性(agencyId)没有与对象的其余部分序列化.出于绝望,我评论了它下面的属性,因为它已经分配了"XMLIgnoreAttribute"...在我评论了被忽略的属性之后,agencyId字段按预期序列化了.

有人可以向我解释为什么会发生这种行为?谢谢!!

        /// 
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
    public string agencyId
    {
        get {
            return this.agencyIdField;
        }
        set {
            this.agencyIdField = value;
            this.RaisePropertyChanged("agencyId");
        }
    }

    /// 
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool agencyIdSpecified
    {
        get
        {
            return this.agencyIdFieldSpecified;
        }
        set
        {
            this.agencyIdFieldSpecified = value;
            this.RaisePropertyChanged("agencyIdSpecified");
        }
    }

Marc Gravell.. 5

有一个模式(对于XmlSerializer),属性Foo也会查找"bool FooSpecified"或"bool ShouldSerializeFoo()" - 如果找到,只有序列化Foo,如果这个其他成员返回true.所以我假设agencyIdSpecified从未被设置为true?删除此成员将使其始终序列化(除非您添加[DefaultValue]或类似).

这种行为用于在我们确实需要知道它是否在原始数据中时对可选值进行建模 - 即它是否具有值0,因为调用者告诉我们该数字,或者因为这只是默认值.

请注意,"FooSpecified"成员通常具有[XmlIgnore]XmlSerializer知道它不应被视为序列化的数据.对于"ShouldSerializeFoo()",这不是必需的(或实际上是合法的),因为方法永远不会被序列化.



1> Marc Gravell..:

有一个模式(对于XmlSerializer),属性Foo也会查找"bool FooSpecified"或"bool ShouldSerializeFoo()" - 如果找到,只有序列化Foo,如果这个其他成员返回true.所以我假设agencyIdSpecified从未被设置为true?删除此成员将使其始终序列化(除非您添加[DefaultValue]或类似).

这种行为用于在我们确实需要知道它是否在原始数据中时对可选值进行建模 - 即它是否具有值0,因为调用者告诉我们该数字,或者因为这只是默认值.

请注意,"FooSpecified"成员通常具有[XmlIgnore]XmlSerializer知道它不应被视为序列化的数据.对于"ShouldSerializeFoo()",这不是必需的(或实际上是合法的),因为方法永远不会被序列化.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有