我的web服务使用了默认的XmlSerializer (由Visual Studio自动提供)。我只使用属性来标记方法[WebMethod]和对象[Serialize()]等。
在web服务和客户端之间有一个双向传递的对象。
此对象的成员之一(public MyClassType MyClass;)应该是单向的,只有一次值发送到客户端。如果客户端返回此成员集,我希望我的web服务不对其进行反序列化,以便反序列化的对象包含该成员的null值。
我做了一些研究,如果我使用非XmlSerializer,那么我可以将"OnDeserialization“属性附加到对象中的方法,以实现我所需要的。
我正在努力避免这种潜在的情况。Web服务将对象与成员集一起发送到客户端。客户端按其应该执行的操作对成员执行操作。客户端发回带有未清除成员的对象(NULLed),因为它忘记了。web服务做了一些额外的工作,并发送回相同的对象(可能稍有修改),但是成员的值没有改变,因此不再是最新的,客户端应该看到它的空值,以防止客户端再次对这个未更改的成员执行操作。web服务可以为客户端应该再次操作的成员设置新值。
对于XmlSerializer,有没有类似的简单方法来做到这一点
发布于 2016-01-27 09:41:59
一种快捷的方法是在服务器端类上有一个代理属性,它返回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]标记"real“属性。
有关更复杂的解决方案,请参阅Excluding some properties during serialization without changing the original class。请注意,作为序列化程序,使用XmlAttributeOverrides的答案是不完整的。有关这种散列的示例,请查看XMLSerialize and EXCLUDE the base class。
发布于 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
https://stackoverflow.com/questions/35026464
复制相似问题