[英]WCF XML deserialization not populating array
我已使用針對.Net 4.5.1的VS 2017 Pro(C#)開發了WCF,該服務在SOAP請求中接受XML對象。
我遇到的問題是XML中沒有反序列化的數組。 WCF正在使用本機解串器。 下面的代碼和XML示例。
XML標簽Application-> Amount可以反序列化
XML標簽Application_SAList-> Application_SA-> SecurityKey>不
ApplicationImpl.Application_SAList的業務邏輯空檢查通過,但是ApplicationImpl.Application_SAList.Application_SA數組的長度為0
所有類都具有“ using System.Runtime.Serialization;”
迫切需要弄清楚這一點! 預先感謝任何人的幫助!
IApplicationService.cs
namespace TApplicationService
{
[ServiceContract(Namespace = "http://xyz")]
public interface IApplicationService
{
[OperationContract(Name="ProcessApplication")]
string ProcessApplication(ApplicationRequestImpl ApplicationRequestImpl);
}
}
ApplicationService.svc.cs
namespace ThriventApplicationService
{
[ServiceBehavior(Namespace = "http://xyz")]
public class ApplicationService : IApplicationService
{
private SDatabase gDatabase = null;
public string ProcessApplication(ApplicationRequestImpl ApplicationRequestImpl)
{
// does a bunch of business logic here
}
}
ApplicationRequestImpl.cs
namespace ThriventApplicationService
{
[DataContract(Namespace = "http://xyz")]
public class ApplicationRequestImpl
{
[DataMember]
public Application Application;
[DataMember(Name="Application_SAList")]
public ApplicationSASingle Application_SAList;
}
}
Application.cs
namespace ThriventApplicationService
{
[DataContract(Namespace = "http://xyz")]
public class Application : IExtensibleDataObject
{
[DataMember]
public string Amount;
}
}
Application_SASingle.cs
namespace ThriventApplicationService
{
[DataContract(Namespace = "http://xyz")]
public class ApplicationSASingle
{
[DataMember]
public Application_SA[] Application_SA;
}
}
Application_SA.cs
namespace ThriventApplicationService
{
[DataContract(Namespace = "http://xyz")]
public class Application_SA
{
[DataMember]
public string Security_Key;
}
}
樣本XML
<ProcessApplication xmlns="http://xyz">
<ApplicationRequestImpl>
<Application>
<Amount>50000.0</Amount>
</Application>
<Application_SAList>
<Application_SA>
<Security_Key>1588</Security_Key>
</Application_SA>
</Application_SAList>
</ApplicationRequestImpl>
</ProcessApplication>
ApplicationRequestImpl.cs中的解決方案
[DataContract(Namespace = "http://prosurv")]
public class ApplicationRequestImpl
{
[DataMember]
public Application Application;
[DataMember(Name="Application_SAList")]
//public Application_SAList Application_SAList;
public Application_SA[] Application_SA;
}
另一槍之后,我找到了解決方案。 問題出在ApplicationRequestImpl
類上。 XML rerader正在尋找Application_SA
內部元素Application_SA
不存在。
[DataContract(Namespace = "http://xyz")]
public class ApplicationRequestImpl
{
[DataMember]
public Application Application;
//Remove these two lines
//[DataMember(Name="Application_SAList")]
//public ApplicationSASingle Application_SAList;
[DataMember]
public Application_SA[] Application_SAList;
}
數組的問題在於它們需要知道其大小。 在初始化期間哪個為0。等於:
public Application_SA[] Application_SA = new Application_SA[0];
反序列化的對象沒有空間可容納。
解決方案是切換到:
public List<Application_SA> Application_SA = new List<Application_SA>();
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.