2010-01-25 82 views
0

Linq-to-Xml包含許多方法,允許您將任意對象添加到xml樹中。這些對象通過某種方式轉換爲字符串,但我似乎無法找到如何發生這種情況的規範。我提到的轉換被提到(但未指定)in MSDNLinq-to-Xml如何將對象轉換爲字符串?

我碰巧需要這個JavaScript interop,但是這對問題並不重要。

Linq to Xml不只是調用.ToString()。首先,它會接受null元素,其次,它做的事情沒有.ToString()實現執行:

例如:

new XElement("elem",true).ToString() == "<elem>true</elem>" 
//but... 
true.ToString() == "True" //IIRC, this is culture invariant, but in any case... 
true.ToString(CultureInfo.InvariantCulture) == "True" 

其他基本數據類型類似的特殊處理。

那麼,有沒有人知道它在做什麼以及在哪裏描述?

回答

0

儘管我找不到MSDN文檔來支持此操作,但當您執行類似new XElement("bla",false)的類時,System.Xml.XmlConvert類用於以非本地化方式(取消)序列化數據。

換句話說,如果有其他人需要知道在將xml樹添加到(非xml)對象時到底xml是幹什麼的,請查看System.Xml.XmlConvert

1

Earmon,你是對的。

快速訪問與Reflector*表明XElement和朋友將嘗試將值轉換爲所有的「簡單」類型,然後調用適當的方法XmlConvert.ToString()

下面是一個(略編輯)摘錄,爲了說明:

if (value is string) 
{ 
    str = (string) value; 
} 
else if (value is double) 
{ 
    str = XmlConvert.ToString((double) value); 
} 
// ... 

如果對象不是「簡單的」類型,則obj.ToString()將被使用。

這非常好,因爲這幾乎是唯一正確的方法。

當然,你通常希望根據「今天是怎麼回事」來做任何事情。的確,MS有朝一日可能會改變他們的做法。我們不在乎 - 重要的是語義是刻在石頭上的。

*(。總是提供產品鏈接爲了方便我與在產品或者其廠家沒有關係,不是被間接客戶等)

更新:Introducing Microsoft LINQ,Pialorsi和俄確認此爲等式的另一側(提取值和鑄造它們),172頁上:

[鑄造的XElement給定類型等十二月時imal] ...各種顯式 [cast]內部使用的操作符重載XmlConvert from 系統。XmlParse .NET類型的方法。