Linq-to-Xml如何将对象转换为字符串?

时间:2010-01-25 13:01:06

标签: xml linq serialization linq-to-xml tostring

Linq-to-Xml包含许多方法,允许您将任意对象添加到xml树。这些对象通过某种方式转换为字符串,但我似乎无法找到如何发生这种情况的规范。我提到的转换(但未指定)in 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"

其他基本数据类型也经过特殊处理。

那么,是否有人知道它在做什么以及在哪里描述?

2 个答案:

答案 0 :(得分:1)

Earmon,你是对的。

使用Reflector * 快速访问后,XElement和朋友会尝试将值转换为所有“简单”类型,然后调用相应的{{ 1}}方法。

这是一个(略有编辑的)摘录,例如:

XmlConvert.ToString()

如果对象不是'简单'类型,则将使用obj.ToString()。

这非常好,因为这几乎是唯一正确的方法。

当然,你通常想要根据“今天是怎样的”来获取任何东西。事实上,MS有朝一日可能会改变他们的做法。我们不在乎 - 重要的是语义是刻在石头上的。

*(产品链接总是为方便起见而提供。除了作为间接客户外,我与产品或其制造商没有任何关系。)

<强> 更新 Introducing Microsoft LINQ中,Pialorsi和Russo在等式的另一边(提取值并将其投射)确认了这一点,第172页:

  

[将XElement转换为给定类型,如Decimal] ...各种 Explicit [cast]运算符重载内部使用 System.Xml中的 XmlConvert 解析 .NET类型的方法。

答案 1 :(得分:0)

虽然我找不到MSDN文档来支持这一点,但当你执行new XElement("bla",false)之类的操作时,System.Xml.XmlConvert类用于(非)以非本地化的方式序列化数据。 / p>

换句话说,如果在xml树中添加(非xml)对象时,如果其他人需要知道linq到xml的确切作用,请查看System.Xml.XmlConvert