未序列化为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,
}

未序列化为XML的自定义数据类型

需要将相关Specified字段设置为true。

accidente.salida_via = AccidenteRequestSalida_via.Item1;
accidente.salida_viaSpecified = true;

解释可以在这里找到https://stackoverflow.com/a/30604168/569662