默认XmlSerializer
(由Visual Studio自动提供)与我的Web服务一起使用。我只使用属性来标记方法[WebMethod]
和对象[Serialize()]
等。
Web服务和客户端之间有双向传递的对象。
此对象的成员(public MyClassType MyClass
;)之一是单向,一次仅发送给客户端。如果客户端返回此成员集,我希望我的Web服务不反序列化它,以便反序列化的对象包含该成员的null
值。
进行了一些研究,如果我使用非XmlSerializer
,那么我可以附加一个" OnDeserialization
"属性为对象中的一个方法,可以实现我的需要。
我试图避免这种潜在的情况。 Web服务使用成员集将对象发送到客户端。客户端应该按原样对成员进行操作。客户端发回的对象未清除(NULLed)成员,因为它忘记了。 Web服务执行一些额外的工作并返回相同的对象(可能稍微修改),但成员的值没有更改,因此不再是最新的,客户端应该看到它的NULL值以防止客户端再次对这个不变的成员采取行动。 Web服务可以为客户端再次操作的成员设置新值。
XmlSerializer
是否有同样简单的方法?
答案 0 :(得分:0)
我认为您正在寻找XmlIgnoreAttribute。 https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlignoreattribute(v=vs.110).aspx
或者也许是“指定”后缀。 http://www.distribucon.com/blog/IgnoringSpecifiedElementsDuringXMLSerialization.aspx
答案 1 :(得分:0)
执行此操作的快速方法是在服务器端类上具有返回当前值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。