【问题标题】:WCF: Nested DataContract Values are nullWCF:嵌套的 DataContract 值为空
【发布时间】:2018-01-31 10:29:01
【问题描述】:

我正在编写一个接受 XML 数据的 WCF 服务。但是,当我使用该服务时,它接收到的参数为空值。

这是我的服务合同:

[OperationContract]
        [ServiceKnownType(typeof(ECardPaymentModel))]
        [ServiceKnownType(typeof(TransactionInformation))]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "ECardPayment")]
        string ECardPayment(ECardPaymentModel Payment);

数据合同:

[DataContract(Name = "Payment", Namespace = "")]
    [Serializable]
    public class ECardPaymentModel
    {
        [DataMember(Name = "TransactionInfo")]
        public TransactionInformation TransactionInfo { get; set; }
    }

    [DataContract(Name = "TransactionInfo")]
    public class TransactionInformation
    {
        [DataMember(Name = "customer")]
        public string Customer { get; set; }

        [DataMember(Name = "transid")]
        public string TransID { get; set; }
    }

我用来调用服务的 XML:

<Payment>
    <TransactionInfo>
           <customer>HD000083</customer>
           <transid>1001</transid>
    </TransactionInfo>
</Payment>

但是,当我收到的 Payment.TransactionInfo.CustomerPayment.TransactionInfo.TransID 的值都为空时。

我不知道我错在哪里。因为当我使用扁平物体时,比如

    [DataContract(Name = "Payment")]
    public class ECardPaymentModel
    {
        [DataMember(Name = "customer")]
        public string Customer { get; set; }

        [DataMember(Name = "transid")]
        public string TransID { get; set; }
    }

和 XML 一样,

<Payment>
           <customer>HD000083</customer>
           <transid>1001</transid>
</Payment>

我收到了 Payment.CustomerPayment.TransID 的正确值。

【问题讨论】:

    标签: c# xml wcf


    【解决方案1】:

    看起来您的 TransactionInformation 有一个默认的 xml 命名空间,但您没有为 customertransid 传递它。

    您应该尝试通过在 TransactionInformation 类上设置 DataContract(..., Namespace = "") 来删除默认命名空间,就像您在 ECardPaymentModel 类上所做的那样。

    【讨论】:

      【解决方案2】:

      尝试在 DataContract 中为 TransactionInformation 添加 Namespace = ""。如果这不起作用,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多