【问题标题】:WCF XML deserialization not populating arrayWCF XML反序列化不填充数组
【发布时间】:2019-12-10 06:57:09
【问题描述】:

我使用 VS 2017 Pro (C#) 针对 .Net 4.5.1 开发了一个 WCF 该服务接受 SOAP 请求中的 XML 对象。
我遇到的问题是 XML 中有一个未反序列化的数组。 WCF 正在使用本机反序列化程序。下面的代码和 XML 示例。

XML标签Application->Amount反序列化ok

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;
        }
    }

应用程序.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;
}

【问题讨论】:

    标签: c# arrays xml wcf serialization


    【解决方案1】:

    又一次拍摄后,我找到了解决方案。问题在于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;
    }
    

    查看full working solution


    数组的问题是它们需要知道它们的大小。其中初始化时为0。等于:

    public Application_SA[] Application_SA = new Application_SA[0];
    

    反序列化的对象没有空间容纳。

    解决方案是切换到:

    public List<Application_SA> Application_SA = new List<Application_SA>();
    

    希望对你有帮助。

    【讨论】:

    • 谢谢。我试过这个,但没有区别。我正在使用 .Count 属性检查 Application_SA 列表的出现次数,它返回零。
    • 你能分享工作样本吗?我想深入研究它并提供帮助。
    • 我可能看到了这个问题。给我一分钟,我会更新答案。
    • 所以这发生了......一位同事建议使用此 xml 结构对 Application_SAList 进行测试,并将其反序列化到数组 [] 中。但是我不能告诉客户更改他们的请求 xml。必须是我可以对类做的事情,以使其在没有额外重复标签的情况下工作:
    • 20192100732297250000.02019210073229721001588
    猜你喜欢
    • 2020-03-03
    • 2015-03-29
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多