忽略运行时序列化某些对象字段(动态忽略)

时间:2011-08-10 16:49:59

标签: c#

我有一个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>

4 个答案:

答案 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;