繁体   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