C# XML序列化和编码属性
我正在尝试使用.NET XmlSerializer反序列化具有以下元素的XML:C# XML序列化和编码属性,c#,xml,xml-parsing,xmlserializer,C#,Xml,Xml Parsing,Xmlserializer,我正在尝试使用.NET XmlSerializer反序列化具有以下元素的XML: <SomeElement Foo_x003a_Bar="123"/> 未从XML读取属性。在UnknownAttribute事件处理程序中,我看到Foo_x003a_Bar未被识别,有效属性列表(Args.ExpectedAttributes)包含Foo_x005F_x003a_Bar 请问这是怎么回事?0x5F是未得分字符的代码。同一元素/类中名称包含\u x0020\u的其他属性将正确反序列化。为
<SomeElement Foo_x003a_Bar="123"/>
未从XML读取属性。在UnknownAttribute
事件处理程序中,我看到Foo_x003a_Bar
未被识别,有效属性列表(Args.ExpectedAttributes
)包含Foo_x005F_x003a_Bar
请问这是怎么回事?0x5F是未得分字符的代码。同一元素/类中名称包含\u x0020\u
的其他属性将正确反序列化。为什么\u x003a\u
会得到某种特殊待遇
编辑:在解析XML字符串之前,以搜索/替换的形式对其进行恶意攻击。但仍然如此
EDIT2:实现这种编码的函数是XmlConvert:EncodeName
,XmlConvert:EncodeLocalName
。后者处理冒号,前者不处理。看起来他们在呼叫EncodeName
EDIT3:。请在那里导航并单击“我也可以”,如果可以的话:)可能它的处理方式有所不同,因为x003a_uuu是:(冒号)20是空格的代码。这两个都是属性名IIRC的禁区。尽管如此,整件事还是有双重编码错误的味道。
class SomeElement
{
//...
[XmlAttribute("Foo_x003a_Bar")]
public string Foo_Bar;
}