【发布时间】:2015-09-10 12:21:32
【问题描述】:
在 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 = (AccidenteRequestCircula_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,
}
任何帮助将不胜感激。
【问题讨论】:
-
使用什么序列化器?
-
@AlexanderPetrov - 基于发布的代码 XmlSerializer。
-
@Tim - 是的,基于它应该是 XmlSerializer,但谁知道作者使用什么。
-
@AlexanderPetrov 我认为它是 XmlSerializer。如何在序列化中包含第二个(自定义)字段?
-
是否也有一个accidentale.salida_viaSpecified 属性?
标签: c# xml web-services wcf serialization