使用 XmlSerializer 反序列化 XML 文件,但属性名称中包含冒号
Deserialize an XML file with XmlSerializer but an attribute contains a colon in its name
我有这个 xml 文件跟在这个 dtd 之后:http://www.edrdg.org/jmdict/jmdict_dtd_h.html
您可以注意到 2 个元素包含名称中带有冒号 (:
) 的属性:
lsource 和 gloss 可以包含名为 xml:lang
的属性,如本例所示(对于 lsource 元素):
<entry>
<ent_seq>1002480</ent_seq>
<k_ele>
<keb>お転婆</keb>
</k_ele>
<k_ele>
<keb>御転婆</keb>
</k_ele>
<r_ele>
<reb>おてんば</reb>
</r_ele>
<sense>
<pos>&adj-na;</pos>
<pos>&n;</pos>
<misc>&uk;</misc>
<lsource xml:lang="dut">ontembaar</lsource>
<gloss>tomboy</gloss>
</sense>
</entry>
我不太确定我的 class 代表 lsource
元素的定义,现在是这样,但它缺少这个属性:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.7.2046.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "JMdict_e.dtd")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "JMdict_e.dtd", IsNullable = false)]
public partial class lsource
{
private string ls_typeField;
private string ls_waseiField;
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ls_type
{
get
{
return this.ls_typeField;
}
set
{
this.ls_typeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ls_wasei
{
get
{
return this.ls_waseiField;
}
set
{
this.ls_waseiField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
我应该如何命名 属性 以使 XmlSerializer 正确识别和解析属性?我尝试添加 属性 public string xml_lang { get; set; }
或 public string lang { get; set; }
但在调用 XmlSerializer.Deserialize 时都无法解析 xml 文件中的属性
该属性位于未生成的名称空间中,因此 elements/attributes 很高兴地被忽略了。用它所在的命名空间修饰 lang 属性将起作用:
[System.Xml.Serialization.XmlAttributeAttribute(Namespace = "http://www.w3.org/XML/1998/namespace")]
public string lang {
get;set;
}
xml 命名空间是 W3C 定义的标准命名空间。其值可查here.
我有这个 xml 文件跟在这个 dtd 之后:http://www.edrdg.org/jmdict/jmdict_dtd_h.html
您可以注意到 2 个元素包含名称中带有冒号 (:
) 的属性:
lsource 和 gloss 可以包含名为 xml:lang
的属性,如本例所示(对于 lsource 元素):
<entry>
<ent_seq>1002480</ent_seq>
<k_ele>
<keb>お転婆</keb>
</k_ele>
<k_ele>
<keb>御転婆</keb>
</k_ele>
<r_ele>
<reb>おてんば</reb>
</r_ele>
<sense>
<pos>&adj-na;</pos>
<pos>&n;</pos>
<misc>&uk;</misc>
<lsource xml:lang="dut">ontembaar</lsource>
<gloss>tomboy</gloss>
</sense>
</entry>
我不太确定我的 class 代表 lsource
元素的定义,现在是这样,但它缺少这个属性:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.7.2046.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "JMdict_e.dtd")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "JMdict_e.dtd", IsNullable = false)]
public partial class lsource
{
private string ls_typeField;
private string ls_waseiField;
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ls_type
{
get
{
return this.ls_typeField;
}
set
{
this.ls_typeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ls_wasei
{
get
{
return this.ls_waseiField;
}
set
{
this.ls_waseiField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
我应该如何命名 属性 以使 XmlSerializer 正确识别和解析属性?我尝试添加 属性 public string xml_lang { get; set; }
或 public string lang { get; set; }
但在调用 XmlSerializer.Deserialize 时都无法解析 xml 文件中的属性
该属性位于未生成的名称空间中,因此 elements/attributes 很高兴地被忽略了。用它所在的命名空间修饰 lang 属性将起作用:
[System.Xml.Serialization.XmlAttributeAttribute(Namespace = "http://www.w3.org/XML/1998/namespace")]
public string lang {
get;set;
}
xml 命名空间是 W3C 定义的标准命名空间。其值可查here.