簡體   English   中英

WCF XML反序列化未填充數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM