我正在使用WCF Web API开发RESTful Web服务。另一方提供了XSD文件。我用xsd.exe生成了C#类。但是,架构包含一个我遇到问题的复杂类型:
<xs:complexType name="SearchableField">
<xs:choice>
<xs:element name="NumericValue" type="xs:float" minOccurs="1" maxOccurs="1"/>
<xs:element name="BooleanValue" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
</xs:choice>
<xs:attribute name="type" type="SearchableFieldType" use="required"/>
</xs:complexType>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SearchableField {
private object itemField;
private string typeField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BooleanValue", typeof(bool), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("NumericValue", typeof(float), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public object Item {
get {
return this.itemField;
}
set {
this.itemField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string type {
get {
return this.typeField;
}
set {
this.typeField = value;
}
}
}
问题:如何初始化类型Item属性 - 这是一个普通对象 - 以便可以根据模式对其进行序列化。
约束:已指定架构,因此我可能无法更改XSD文件。
以下是XML元素的示例,它的外观如下:
<SearchableFields>
<SearchableField type="MEGAPIXELS">
<NumericValue>12</NumericValue>
</SearchableField>
<SearchableField type="WEATHER_RESISTANT">
<BooleanValue>true</BooleanValue>
</SearchableField>
<SearchableField type="WATER_RESISTANT">
<BooleanValue>false</BooleanValue>
</SearchableField>
</SearchableFields>
答案 0 :(得分:1)
(注释)
当我这样尝试时,它无法序列化:
var field = new SearchableField { type = "monitor_size", Item = 5 };
确实 - NumericValue
在xml / C#中声明为float
,使用int
会引入无效的强制转换;然而,这是有效的:
var field = new SearchableField { type = "monitor_size", Item = 5F };
带输出:
<SearchableField type="monitor_size">
<NumericValue>5</NumericValue>
</SearchableField>