2010-01-25 99 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类型的方法。