【发布时间】: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