未序列化为XML的自定义数据类型
本文关键字:定义数据类型 XML 序列化 | 更新日期: 2023-09-27 18:12:02
在VS2012 (c#, . net 4.5)中,我通过从解决方案资源管理器中添加服务引用来消费第三方WebService(自动生成的reference .cs文件的内容是附加的)。
当我调用WebService的一个方法来插入该类的一个对象时,第一个字段被正确地序列化为XML,而第二个字段(自定义)被忽略。
但是,当我调用另一个方法来查询该类的对象(之前使用soapUI插入,它告诉我WebService运行正常)时,我可以正确接收和处理两个字段(这意味着反序列化过程执行得很好,我认为)。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34209")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://es/mynamespace")]
public partial class AccidenteRequest : object, System.ComponentModel.INotifyPropertyChanged {
private string descripcionField;
private AccidenteRequestSalida_via salida_viaField;
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public string descripcion {
get {
return this.descripcionField;
}
set {
this.descripcionField = value;
this.RaisePropertyChanged("descripcion");
}
}
[System.Xml.Serialization.XmlElementAttribute(Order = 1)]
public AccidenteRequestSalida_via salida_via {
get {
return this.salida_viaField;
}
set {
this.salida_viaField = value;
this.RaisePropertyChanged("salida_via");
}
}
}
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool salida_viaSpecified {
get {
return this.salida_viaFieldSpecified;
}
set {
this.salida_viaFieldSpecified = value;
this.RaisePropertyChanged("salida_viaSpecified");
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34209")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://es/mynamespace")]
public enum AccidenteRequestSalida_via {
[System.Xml.Serialization.XmlEnumAttribute("0")]
Item0,
/// <comentarios/>
[System.Xml.Serialization.XmlEnumAttribute("1")]
Item1,
}
在XSD文件中,这些字段是:
<xs:element minOccurs="0" name="descripcion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2000" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="salida_via">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:enumeration value="0" />
<xs:enumeration value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
我给这个字段赋值:
accidente.salida_via = AccidenteRequestSalida_via.Item1;
但是我不能在发送给WebService的最终XML中看到这个值。
给定:更新:默认情况下,c#似乎从0开始枚举。可以这样做:accidente。circula_sentido_contrario = (incidenterequestcircula_sentido_contrario)VALUE_FROM_DB
VALUE_FROM_DB来自数据库,我需要它具有与XmlEnumAttribute中的字符串相同的值。现在我必须赋值0,然后将其转换为Item1,但我需要赋值1。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34209")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="somenamespace")]
public enum AccidenteRequestCircula_sentido_contrario {
/// <comentarios/>
[System.Xml.Serialization.XmlEnumAttribute("1")]
Item1,
}
需要将相关Specified字段设置为true。
accidente.salida_via = AccidenteRequestSalida_via.Item1;
accidente.salida_viaSpecified = true;
解释可以在这里找到https://stackoverflow.com/a/30604168/569662