C# XmlSerializer 在反序列化时忽略元素
本文关键字:元素 反序列化 XmlSerializer | 更新日期: 2023-09-27 18:32:06
默认XmlSerializer
(由Visual Studio自动提供)用于我的Web服务。 我只使用属性来标记方法[WebMethod]
和对象[Serialize()]
等。
对象在 Web 服务和客户端之间双向传递。
其中一名成员(public MyClassType MyClass
;)这个对象是单向的,一次只向客户端发送值。 如果客户端返回此成员集,我希望我的 Web 服务不反序列化它,以便反序列化的对象包含该成员的null
值。
做了一些研究,如果我使用非XmlSerializer
,那么我可以将"OnDeserialization
"属性附加到对象内的方法上,以实现我需要的。
我试图避免这种潜在的情况。Web 服务将对象与成员集一起发送到客户端。 客户端按预期对成员执行操作。 客户端发回未清除成员 (NULLed) 的对象,因为它忘记了。 Web 服务执行一些额外的工作,并将相同的对象发回(可能略有修改),但成员的值未更改,因此不再是最新的,客户端应看到它的 NULL 值,以防止客户端再次对此未更改的成员执行操作。 Web 服务可以为客户端应再次操作的成员设置一个新值。
有没有类似的简单方法可以为XmlSerializer
做到这一点?
的快速而肮脏的方法是在服务器端类上有一个代理属性,该属性返回当前值 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]
标记"不动产"属性。
有关更复杂的解决方案,请参阅在不更改原始类的情况下在序列化期间排除某些属性。 请注意,使用 XmlAttributeOverrides
的答案不完整,因为序列化程序必须缓存在哈希表中以防止严重的内存泄漏。 有关此类哈希的示例,请检查 XML"系列化"和"排除基类"。
我想你正在寻找XmlIgnoreAttribute。
或者也许是"指定"后缀。