【问题标题】:C# XmlSerializer ignore element on deserializationC# XmlSerializer 在反序列化时忽略元素
【发布时间】:2016-01-27 00:09:04
【问题描述】:

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

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

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

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

我试图避免这种潜在的情况。 Web 服务将对象与成员集一起发送给客户端。客户端按其应有的方式对成员进行操作。由于忘记了,客户端发回了成员未清除(NULLed)的对象。 Web 服务做了一些额外的工作并将相同的对象发回(可能稍作修改),但成员的值没有改变,因此不再是当前的,客户端应该看到它的 NULL 值以防止客户端对此采取行动再次不变的成员。 Web 服务可以为客户端应再次操作的成员设置一个新值。

对于XmlSerializer,是否有类似的简单方法?

【问题讨论】:

  • 你希望成员不被反序列化,还是事后设置?防止设置容易,防止反序列化很难。
  • 不被反序列化。对象从客户端返回后,在对象再次可用于 Web 服务代码时,成员应为 NULL。
  • 这意味着它没有设置。我的观点是,很容易将您的 MyClassType 对象反序列化然后丢弃并且永不退缩
  • 您的意思是“送回”?我将用我试图避免的情况来更新我的问题(如果可以的话,因为我是新来的)。
  • 不,我的意思是“退后”。 IE。从客户端在服务器上反序列化时,不要将属性值设置回来。

标签: c# deserialization xmlserializer


【解决方案1】:

快速而简单的方法是在服务器端类上设置一个代理属性,该属性返回MyClass 的当前值,但在设置时丢弃当前值:

    [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]标记“真实”属性。

有关更复杂的解决方案,请参阅Excluding some properties during serialization without changing the original class。请注意,使用XmlAttributeOverrides 的答案是不完整的,因为序列化程序must be cached in a hash table to prevent a severe memory leak。有关此类散列的示例,请查看XMLSerialize and EXCLUDE the base class

【讨论】:

    【解决方案2】:

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
    • 我需要的是一个仅在反序列化时应用的 XmlIgnoreAttribute。就目前而言,它适用于序列化。我希望成员在退出时在 Web 服务中被序列化,我不希望它在返回时在 Web 服务中被反序列化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多