我尝试使用.NET XmlSerializer使用以下元素反序列化XML:
<SomeElement Foo_x003a_Bar="123"/>
在目标类中,有以下声明:
class SomeElement
{
//...
[XmlAttribute("Foo_x003a_Bar")]
public string Foo_Bar;
}
未从XML读取该属性。在UnknownAttribute
事件处理程序中,我发现无法识别Foo_x003a_Bar
,而有效属性列表(Args.ExpectedAttributes
)则包含Foo_x005F_x003a_Bar
。
这是什么交易,好吗? 0x5F是非核心字符的代码。名称包含_x0020_
的同一元素/类中的其他属性正确反序列化。为什么_x003a_
会得到某种特殊待遇?
EDIT2:实现此类编码的函数是XmlConvert:EncodeName
,XmlConvert:EncodeLocalName
。后者处理冒号,前者没有。看起来他们正在调用EncodeName
...
EDIT3:filed a bug report with Microsoft。请在那里导航并点击&#34;我也可以&#34;如果你也可以:)