2011-03-03 20 views
2

如果我有以下簡單的類:有什麼辦法來控制ASMX Web服務中float/double的格式?

[Serializable] 
public class Test 
{ 
    public double a = 0.0000001; 
} 

當我返回此類型從.NET ASMX Web服務的對象時,響應將是:

<Test> 
    <a>1E-07</a> 
</Test> 

是,也許不是巧合的是,默認行爲0.0000001.ToString(),儘管至少有ToString,我可以指定格式參數(在這種情況下,我不需要想要指數表示法。事實上,我甚至不知道如何將它鉤入我曾經有過XmlSerializer完全控制它,更不用說我可以放在返回對象上的屬性。

編輯:我仍然非常想保留屬性,我實際上將它應用於強類型。在.NET中,0.0000001和1E-7都是有效的雙重表示,我只是想讓它通過網絡發送內容。

+1

如果此值根據模式進行驗證,那麼爲什麼您的客戶會關心?他們肯定會消耗任何驗證的值?如果他們不能,那麼你需要改變模式來匹配他們可以處理的內容。 – 2011-03-03 23:15:57

+0

商業用戶與開發人員。除了WS端點之外,我們還有將數據轉儲到CSV文件等的工具。兩者的需求通常沒有太大的脫節,但我試圖將視覺美學與發展實用主義相協調。 – 2011-03-03 23:25:46

+0

「.NET中0.0000001和1E-7都是有效的雙重表示」 - 但對於WS來說,重要的是要有一個有效的xs:double表示。 – Joe 2011-03-04 08:31:27

回答

2

一種簡單的方法是將強類型屬性標記爲忽略並僅爲XML序列化提供另一個字符串屬性。在其getter中,您可以根據需要應用格式,並將其解析回setter中。

+0

+1指出,但我應該指定(並在編輯中):如果可能,我真的想保持這種強類型。上下文是針對公共API的,所以我想盡可能保留輸入。 – 2011-03-03 23:11:27

1

雙線將使用與the XML Schema xs:double datatype兼容的表示法通過線路發送。

任何明智的客戶應該能夠解釋這一點。如果您有一些特定的原因需要其他表示形式,唯一現實的解決方案是使用一個字符串,並以您想要的方式進行格式化。