首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反序列化时C# XmlSerializer忽略元素

反序列化时C# XmlSerializer忽略元素
EN

Stack Overflow用户
提问于 2016-01-27 08:09:05
回答 2查看 3.4K关注 0票数 0

我的web服务使用了默认的XmlSerializer (由Visual Studio自动提供)。我只使用属性来标记方法[WebMethod]和对象[Serialize()]等。

在web服务和客户端之间有一个双向传递的对象。

此对象的成员之一(public MyClassType MyClass;)应该是单向的,只有一次值发送到客户端。如果客户端返回此成员集,我希望我的web服务不对其进行反序列化,以便反序列化的对象包含该成员的null值。

我做了一些研究,如果我使用非XmlSerializer,那么我可以将"OnDeserialization“属性附加到对象中的方法,以实现我所需要的。

我正在努力避免这种潜在的情况。Web服务将对象与成员集一起发送到客户端。客户端按其应该执行的操作对成员执行操作。客户端发回带有未清除成员的对象(NULLed),因为它忘记了。web服务做了一些额外的工作,并发送回相同的对象(可能稍有修改),但是成员的值没有改变,因此不再是最新的,客户端应该看到它的空值,以防止客户端再次对这个未更改的成员执行操作。web服务可以为客户端应该再次操作的成员设置新值。

对于XmlSerializer,有没有类似的简单方法来做到这一点

EN

回答 2

Stack Overflow用户

发布于 2016-01-27 09:41:59

一种快捷的方法是在服务器端类上有一个代理属性,它返回MyClass的当前值,但在设置时会丢弃当前值:

代码语言:javascript
复制
    [XmlIgnore]
    public MyClassType MyClass { get; set; }

    [XmlElement("MyClass")]
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DebuggerBrowsable(DebuggerBrowsableState.Never)]
    public MyClassType GetMyClassForXml
    {
        get
        {
            return MyClass;
        }
        set
        {
            // DO NOTHING
        }
    }

然后用[XmlIgnore]标记"real“属性。

有关更复杂的解决方案,请参阅Excluding some properties during serialization without changing the original class。请注意,作为序列化程序,使用XmlAttributeOverrides的答案是不完整的。有关这种散列的示例,请查看XMLSerialize and EXCLUDE the base class

票数 1
EN

Stack Overflow用户

发布于 2016-01-27 08:16:02

我想你要找的是XmlIgnoreAttribute。https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlignoreattribute(v=vs.110).aspx

或者可能是“指定”后缀。http://www.distribucon.com/blog/IgnoringSpecifiedElementsDuringXMLSerialization.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35026464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档