0

Linq-to-Xmlには、xmlツリーに任意のオブジェクトを追加できる多くのメソッドが含まれています。これらのオブジェクトは何らかの方法で文字列に変換されますが、これがどのように発生するかについての仕様が見つからないようです。私が参照している変換は、MSDNで言及されています(ただし、指定されていません) 。

私はたまたまjavascriptの相互運用のためにこれを必要としていますが、それは問題にはあまり関係ありません。

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"

他の基本的なデータ型も同様に特別に扱われます。

それで、誰かがそれが何をしているのか、そしてそれがどこに記述されているのか知っていますか?

4

2 に答える 2

1

イヤーモン、あなたは正しいです。

Reflector *をざっと見てXElementみると、友達はすべての「単純な」タイプに値をキャストしてから、適切なXmlConvert.ToString()メソッドを呼び出そうとしていることがわかります。

説明のために、(少し編集された)抜粋を次に示します。

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

オブジェクトが「単純な」タイプでない場合は、obj.ToString()が使用されます。

これは非常に良い方法です。それがほとんど正しい方法だからです。

もちろん、あなたは通常、「それが今日のようになっている」に基づいて、一粒の塩で何でも取りたいと思うでしょう。確かに、MSはいつか彼らのやり方を変えるかもしれません。重要なのは、セマンティクスが石に刻まれていることです。

*(製品リンクは常に便宜上提供されています。私は間接的な顧客であることを除いて、製品またはその製造元とは関係がありません。)

更新: Microsoft LINQの紹介で、 PialorsiとRussoは、方程式の反対側(値の抽出とキャスト)についてこれを確認します(172ページ)。

[XElementをDecimalなどの特定の型にキャストする場合]...さまざまなExplicit [cast]演算子のオーバーロードは、System.XmlのXmlConvertまたは.NET型のParseメソッドを内部的に使用します。

于 2010-03-12T18:48:57.117 に答える
0

これをサポートするMSDNドキュメントは見つかりませんがnew XElement("bla",false)System.Xml.XmlConvertクラスのようなことを行うと、ローカライズされていない方法でデータを(逆)シリアル化するために使用されます。

言い換えると、(非xml)オブジェクトをxmlツリーに追加するときに、他の誰かがlinq to xmlが正確に何をするかを知る必要がある場合は、を見てくださいSystem.Xml.XmlConvert

于 2010-02-12T17:25:08.153 に答える