[英]Deserializing XML From Rest service
我無法將Rest XML響應反序列化到其對象中。 如果我序列化我在消費者應用程序中期望的數據協定,則XML格式與實際從Rest服務接收的格式略有不同。 從服務發送的數據協定類與我期望的完全相同。 如果我將從Rest服務收到的XML更改為消費者應用程序所期望的響應,那么一切正常。
我從Rest服務收到的回復如下。
<GeneralInquiryResponseCollection xmlns=\"http://schemas.datacontract.org/2004/07/MEA.SmartApp.AdminGateway.ServiceContract.Responses\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">
<ResultCode i:nil=\"true\"/>
<ResultCodeDescription i:nil=\"true\"/>
<ResultInfoDescription i:nil=\"true\"/>
<ErrorMessage/>
<IsSuccess>true</IsSuccess>
<TransactionStatus>
<Description>Transaction Successful</Description>
<StatusCode>2000</StatusCode>
</TransactionStatus>
<AsOfDate>9999-12-31T00:00:00</AsOfDate>
<FunctionalGroupingCode>302</FunctionalGroupingCode>
<GeneralInquiryResponseContainer>
</GeneralInquiryResponseContainer>
<LastWMAValuationDate>0001-01-01T00:00:00</LastWMAValuationDate>
<PolicyNumber>551372461</PolicyNumber>
<TransactionExecutionDateTime>2014-01-14T15:05:05.859558</TransactionExecutionDateTime>
</GeneralInquiryResponseCollection>
我從預期數據合同序列化時獲得的XML如下所示。
<?xml version=\"1.0\"?>
<GeneralInquiryResponseCollection xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<ResultCode />
<ResultCodeDescription>Success</ResultCodeDescription>
<ResultInfoDescription>Result Info Description</ResultInfoDescription>
<IsSuccess>true</IsSuccess>
<TransactionStatus>
<Description>Transaction Successful</Description>
<StatusCode>2000</StatusCode>
<HTTPStatusCode>OK</HTTPStatusCode>
</TransactionStatus>
<StatusCode>2000</StatusCode>
<AsOfDate>9999-12-31T23:59:59.9999999</AsOfDate>
<FunctionalGroupingCode>302</FunctionalGroupingCode>
<LastWMAValuationDate>0001-01-01T00:00:00</LastWMAValuationDate>
<PolicyNumber>551372461</PolicyNumber>
<TransactionExecutionDateTime>2014-01-14T14:40:59.0930535-07:00</TransactionExecutionDateTime>
</GeneralInquiryResponseCollection>
它們之間的主要區別如下。
消費者期望 - <?xml version=\\"1.0\\"?>
- 但Rest服務不會發送此消息。
消費者期望 - <GeneralInquiryResponseCollection xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\" xmlns:xsd=\\"http://www.w3.org/2001/XMLSchema\\">
休息服務發送<GeneralInquiryResponseCollection xmlns=\\"http://schemas.datacontract.org/2004/07/MEA.SmartApp.AdminGateway.ServiceContract.Responses\\" xmlns:i=\\"http://www.w3.org/2001/XMLSchema-instance\\">
反序列化的代碼低於T是GeneralInquiryResponseCollection的地方。
using (var ResponseStream = Response.GetResponseStream())
{
XmlSerializer Serializer = new XmlSerializer(typeof(T));
return (T)Serializer.Deserialize(ResponseStream);
}
以下是服務合同
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using MEA.SmartApp.AdminGateway.Interfaces;
namespace MEA.SmartApp.AdminGateway.ServiceContract.Responses
{
[DataContract]
public class GeneralInquiryResponseCollection : WMAResponse, IWMAResponse
{
#region Data Members
[DataMember]
public DateTime AsOfDate { get; set; }
[DataMember]
public string FunctionalGroupingCode { get; set; }
[DataMember]
public List<GeneralInquiryResponse> GeneralInquiryResponseContainer { get; set; }
[DataMember]
public DateTime LastWMAValuationDate { get; set; }
[DataMember]
public string PolicyNumber { get; set; }
[DataMember]
public DateTime? TransactionExecutionDateTime { get; set; }
#endregion
}
}
GeneralInquiryResponse
using System;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using MEA.SmartApp.AdminGateway.Interfaces;
namespace MEA.SmartApp.AdminGateway.ServiceContract.Responses
{
[DataContract(Namespace = "")]
[XmlInclude(typeof(ClientResponse))]
[XmlInclude(typeof(ClientRoleResponse))]
[XmlInclude(typeof(DCAFundResponse))]
[XmlInclude(typeof(DCAResponse))]
[XmlInclude(typeof(GMABResponse))]
[XmlInclude(typeof(GMDBResponse))]
[XmlInclude(typeof(GMIBResponse))]
[XmlInclude(typeof(GWBResponse))]
[XmlInclude(typeof(InterestRateResponse))]
[XmlInclude(typeof(MoneyFundSegmentResponse))]
[XmlInclude(typeof(MRDFundResponse))]
[XmlInclude(typeof(PayoutFundResponse))]
[XmlInclude(typeof(PayoutResponse))]
[XmlInclude(typeof(PolicyFundResponse))]
[XmlInclude(typeof(PolicyResponse))]
[XmlInclude(typeof(PremiumBonusTransactionHistoryResponse))]
[XmlInclude(typeof(ProducerGroupSegmentResponse))]
[XmlInclude(typeof(RebalancingResponse))]
[XmlInclude(typeof(RebalancingScheduledFundResponse))]
[XmlInclude(typeof(RebalancingUnscheduledFundResponse))]
[XmlInclude(typeof(WithdrawalGrossTransactionHistoryResponse))]
[XmlInclude(typeof(WithdrawalSurrenderTransactionHistoryResponse))]
public abstract class GeneralInquiryResponse : IGeneralInquiryResponse
{
#region Data Members
[DataMember]
public string ResponseIdentifier { get; set; }
#endregion
}
}
我一直在努力與這一個,我打死角。 有什么建議么?
這意味着ResultCode為null
<ResultCode i:nil=\"true\"/>
這意味着ResultCode =“”
<ResultCode />
如果您不只是詢問nil,請詳細解釋。 它只是一個nillable屬性,在模式中定義。
要刪除命名空間:
[DataContract(Namespace = "")]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.