我有一个webmethod,它返回一个对象ASResponse:
[WebMethod]
public ASResponse test()
{
return new ASResponse ();
}
问题:
是否可以通过强制编译器不序列化某些ASResponse类字段(如果某些条件为真)来自定义SOAP响应,并在某些条件为假时允许它们。
样品:
<soap:Body>
<WrongCaseResponse xmlns="http://tempuri.org">
<WrongCaseResult>
<Length>5</Length>
<ID>125487</ID>
<Error>183</Error>
</WrongCaseResult>
</WrongCaseResponse>
</soap:Body>
=============================================== ===========================
<soap:Body>
<SuccessCaseResponse xmlns="http://tempuri.org">
<SuccessCaseResult>
<Length>5</Length>
<ID>125487</ID>
<CallHome>5000</CallHome>
</SuccessCaseResult>
</SuccessCaseResponse >
</soap:Body>
答案 0 :(得分:1)
您在寻找XmlIgnoreAttribute
吗?把它放在你的属性上,XML序列化将忽略它。
我对SOAP序列化并不是非常热门,所以你实际上可能需要SoapIgnoreAttribute
而不是......我不能说老实说我知道它们之间的区别,但希望能给你两种选择,你将能够进一步发展:)
答案 1 :(得分:1)
如果我正确阅读了这个问题,如果“某些条件”为真或假,则要隐藏属性。已经提到的XmlIgnoreAttribute将始终从序列化中排除属性。如果您正在寻找一种在运行时确定是否要包含或排除属性的方法,请查看ShouldSerialize方法here
小例子:
[XmlElement("visibility")]
public bool? Visibility { get; set; }
public bool ShouldSerializeVisibility() { return Visibility.HasValue; }
答案 2 :(得分:0)
是的,使用[XmlIgnore]
当然,如果您可以控制ASResponse类(对不起,我不太了解API)
- 编辑
对不起,我现在正确地理解了这个问题。我不知道如何动态定义它。
答案 3 :(得分:0)
您可以定义一些默认值,它可以防止字段序列化。但它仅适用于XmlSerializer
[XmlElement, DefaultValue("")]
string data;
[XmlArray, DefaultValue(null)]
List<string> data;