c# - 嵌套数据的序列化失败
问题描述
Visual Studio 创建的自动生成的 WCF 类没有为我正在使用的端点正确反序列化 SOAP 响应。
对于肯定返回给服务的对象,它返回 null。
这是从生成的类wsdl
public partial class OrderDepartureLoadRail : object, System.ComponentModel.INotifyPropertyChanged {
private string request_NumberField;
private string agreement_NumberField;
private System.DateTime agreement_DataField;
private System.DateTime eTD_StartField;
private System.DateTime eTD_EndField;
private OrderDepartureLoadRailCONTAINERS cONTAINERSField;
private cargo[] cARGOSField;
private contractor[] cONTRACTORSField;
private string station_Code_ToField;
private string port_Code_ToField;
private string commentField;
private contact contactPersonField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://objects.common.exchange.terminal.service.cyberlines", Order=0)]
public string Request_Number {
get {
return this.request_NumberField;
}
set {
this.request_NumberField = value;
this.RaisePropertyChanged("Request_Number");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://objects.common.exchange.terminal.service.cyberlines", Order=1)]
public string Agreement_Number {
get {
return this.agreement_NumberField;
}
set {
this.agreement_NumberField = value;
this.RaisePropertyChanged("Agreement_Number");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://objects.common.exchange.terminal.service.cyberlines", Order=2)]
public System.DateTime Agreement_Data {
get {
return this.agreement_DataField;
}
set {
this.agreement_DataField = value;
this.RaisePropertyChanged("Agreement_Data");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://objects.common.exchange.terminal.service.cyberlines", Order=3)]
public System.DateTime ETD_Start {
get {
return this.eTD_StartField;
}
set {
this.eTD_StartField = value;
this.RaisePropertyChanged("ETD_Start");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://objects.common.exchange.terminal.service.cyberlines", Order=4)]
public System.DateTime ETD_End {
get {
return this.eTD_EndField;
}
set {
this.eTD_EndField = value;
this.RaisePropertyChanged("ETD_End");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=5)]
public OrderDepartureLoadRailCONTAINERS CONTAINERS {
get {
return this.cONTAINERSField;
}
set {
this.cONTAINERSField = value;
this.RaisePropertyChanged("CONTAINERS");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=6)]
[System.Xml.Serialization.XmlArrayItemAttribute("Cargo", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public cargo[] CARGOS {
get {
return this.cARGOSField;
}
set {
this.cARGOSField = value;
this.RaisePropertyChanged("CARGOS");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=7)]
[System.Xml.Serialization.XmlArrayItemAttribute("Contractor", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public contractor[] CONTRACTORS {
get {
return this.cONTRACTORSField;
}
set {
this.cONTRACTORSField = value;
this.RaisePropertyChanged("CONTRACTORS");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="token", Order=8)]
public string Station_Code_To {
get {
return this.station_Code_ToField;
}
set {
this.station_Code_ToField = value;
this.RaisePropertyChanged("Station_Code_To");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="token", Order=9)]
public string Port_Code_To {
get {
return this.port_Code_ToField;
}
set {
this.port_Code_ToField = value;
this.RaisePropertyChanged("Port_Code_To");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=10)]
public string Comment {
get {
return this.commentField;
}
set {
this.commentField = value;
this.RaisePropertyChanged("Comment");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=11)]
public contact ContactPerson {
get {
return this.contactPersonField;
}
set {
this.contactPersonField = value;
this.RaisePropertyChanged("ContactPerson");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
web api xml
以格式传输到文档时
<OrderDepartureLoadRail>
<Request_Number>1128606</Request_Number>
<Agreement_Number>ВЖЭ-13/492</Agreement_Number>
<Agreement_Data>2013-11-19T00:00:00</Agreement_Data>
<ETD_Start>2020-09-28T00:00:00</ETD_Start>
<ETD_End>2020-09-28T23:59:59</ETD_End>
<CONTAINERS>
<Container>
<ContNumber>TCNU802</ContNumber>
<ContQuantity>1</ContQuantity>
<ContType>40HC</ContType>
<ContOwner>COC</ContOwner>
<Weight>180</Weight>
<Tare>41</Tare>
</Container>
<SEALS>
<seal>
<Seals_Number>У965</Seals_Number>
</seal>
</SEALS>
</CONTAINERS>
<CARGOS>
<cargo>
<ETSNG>263</ETSNG>
<NumberOfSeats>20</NumberOfSeats>
<Pack>BG</Pack>
<Weight>180</Weight>
<Guard>false</Guard>
<Danger>false</Danger>
<OrderNo>1</OrderNo>
</cargo>
</CARGOS>
<CONTRACTORS>
<contractor>
<Contractor_Type>SH</Contractor_Type>
<Name>ПАО </Name>
<OKPO>01126016</OKPO>
<SendersMarks>Получ </SendersMarks>
<Comment>После</Comment>
</contractor>
</CONTRACTORS>
<Station_Code_To>9807</Station_Code_To>
<Port_Code_To>Кор</Port_Code_To>
<Comment />
<ContactPerson>
<FIO>Хузе</FIO>
<Phone>+79454</Phone>
<Mail>KKh@ya.ru</Mail>
</ContactPerson>
</OrderDepartureLoadRail>
忽略顺序并返回null
(data = null)
[HttpPost]
[Route("PostCreateOrderDepartureLoadRail")]
public OrderResponse PostCreateOrderDepartureLoadRail(OrderDepartureLoadRail data)
{
...
}
在这里他们描述了一个类似的错误,但他们没有找到解决方案 github-solution
解决方案
我设法使用第三方库 YAXLib 解决了这个问题
推荐阅读
- javascript - React Native Picker onValueChange 问题
- jenkins - 使用文本编辑器配置 Jenkins 作业的 UI 元素
- ios - 当应用程序返回前台时删除任何弹出窗口
- spring-boot - 使用 spring boot、crud 存储库、hibernate 和 postgres 使用非自动生成的 id 级联父子
- laravel - 如何在子刀片和主刀片之间发送数据
- java - 如何将 chrome 窗口附加到桌面应用程序 Selenium?
- java - 有谁知道密码是如何在 xshell 会话中加密的
- laravel - 如何在 Laravel 7 Blade 中通过搜索使用 API?
- bash - 使用 netcat 创建多个连接,并通过每个 netcat 连接发送连续流量
- arduino - 为什么 ESP8266 模块可以连接到我的 iPhone 热点,但无法连接到我的家庭 wifi?