1. 如果在xml中一个complexType的属性中包含一个属性组A,而在属性组A中又包含属性组B,则B的所有属性在生成类文件时,会被忽略。
微软对此也有详细说明:http://msdn.microsoft.com/en-us/library/484632e7(v=vs.80).aspx
有个解决方法是写一个xsl文件,将所有嵌套的属性组遍历出来,写在最外层,然后再对该文件生成.
2. 明明赋了值,也有xmlAttribute,但是序列化出来的文件里,该属性的值却丢失了
i.e.
XSD:
<xs:attribute name="Start" type="xs:datetime" use="optional" />
生成如下代码:
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
public System.DateTime Start
{
...
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool StartSpecified
{
...
}
这里, 不仅要设置obj.Start = ..., 还要加上obj.StartSpecified = true;
原因:http://msdn.microsoft.com/zh-cn/library/w6sktzs3(v=vs.80).aspx
简单解释:
未指定 default 的 optional:Xsd.exe 生成一个具有 XmlAttributeAttribute 的公共字段。
此外,如果该属性的类型不是引用类型(例如字符串),它会生成一个 bool 类型的公共字段,该字段的名称为该属性字段的名称再追加 Specified。
例如,如果属性字段的名称为 start,则 bool 字段的名称将为 startSpecified。将某个对象序列化为 XML 时,
XmlSerializer 类检查 bool 字段的值,以确定是否写入可选的属性。
出现的 bool 字段具有 System.Xml.Serialization.XmlIgnoreAttribute,可防止它被 XmlSerializer 序列化。