2011-08-10 96 views
0

我有一個WebMethod它返回一個對象ASResponse:忽略在運行時序列化的一些對象字段(動態忽略)

[WebMethod] 
    public ASResponse test() 
    { 
     return new ASResponse(); 
    } 

問:

是否可以自定義由力SOAP響應編譯器做不序列化某些ASResponse類字段(如果某些條件爲真),並在某些條件爲假時允許它們。

樣品:

<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> 

回答

1

如果我正確地閱讀了這個問題,你想隱藏屬性,如果'某些條件'是真或假。已經提到的XmlIgnoreAttribute將始終從序列化中排除一個屬性。如果你正在尋找一種方法來確定在運行時,如果你想包含或排除的屬性有一個看看ShouldSerialize方法here

小例子:

[XmlElement("visibility")] 
public bool? Visibility { get; set; } 
public bool ShouldSerializeVisibility() { return Visibility.HasValue; } 
+0

我會看看,但我認爲你必須完全已瞭解了我'期待 – user852194

+0

感謝埃迪,它的作品在我的意料的50%,現在我已經Ø發現瞭如何從示例SOAP 1.1請求和最終用戶的響應中隱藏這些字段 – user852194

1

您是在查找XmlIgnoreAttribute?把它放在你的屬性上,XML序列化會忽略它。

我在SOAP序列化方面並不是很熱,所以它可能是你實際上需要SoapIgnoreAttribute而不是......我不能誠實地說我知道他們之間的區別,但希望給你兩個選項,你會能夠採取進一步:)

0

沒錯,標記屬性,你想和[XmlIgnore]

當然忽略,如果你有過ASResponse類控制(對不起,我不知道很好的API )

- 編輯

對不起,我現在正確地理解了這個問題。我不知道如何動態地定義它。

0

您可以定義一些缺省值,它防止字段被序列化。但它僅適用於XmlSerializer的

[XmlElement, DefaultValue("")] 
string data; 

[XmlArray, DefaultValue(null)] 
List<string> data;