WCF Web服务响应XML文件

时间:2010-03-08 21:54:35

标签: c# xml wcf

我在WCF中使用数据协定,但是在xml文件中发送了一些不需要的响应标记,我不知道如何修改数据协定类,以便我可以避免发送不需要的响应字段。在下面的XML文件中,所有粗体和斜体的文本都是不需要的。感谢。

  <GetCertMailReceiptNumbersResponse xmlns="http://tempuri.org/">
      <GetCertMailReceiptNumbersResult xmlns:a="http://schemas.datacontract.org/2004/07/WcfSmartConnect" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        ***<a:AccountNumber i:nil="true" />
        <a:Address1 i:nil="true" />
        <a:Address2 i:nil="true" />
        <a:City i:nil="true" />
        <a:Name1 i:nil="true" />
        <a:Name2 i:nil="true" />
        <a:OrderNumber>1325661</a:OrderNumber>
        <a:Password i:nil="true" />***
        <a:ReturnCode>200</a:ReturnCode>
        <a:ReturnMessage />
        ***<a:SoftwareID i:nil="true" />
        <a:State i:nil="true" />
        <a:TrackingStatus i:nil="true" />
        <a:USPSReceipt i:nil="true" />
        <a:UserID i:nil="true" />
        <a:Zip i:nil="true" />***
        <a:lsCMRN>
          <a:CertMailReceiptNumbers>
            <a:AccountNumber>1</a:AccountNumber>
            <a:Address1>201 Test Ln</a:Address1>
            <a:Address2>TSTCity TST  123456</a:Address2>
            <a:City>TSTCity</a:City>
            <a:Name1>pinu</a:Name1>
            <a:Name2 i:nil="true" />
            <a:OrderNumber />
            ***<a:Password />
            <a:ReturnCode>0</a:ReturnCode>
            <a:ReturnMessage i:nil="true" />
            <a:SoftwareID />***
            <a:State> TST </a:State>
            <a:TrackingStatus>MAILED</a:TrackingStatus>
            <a:USPSReceipt>71926389001019</a:USPSReceipt>
            ***<a:UserID />***
            <a:Zip>123456</a:Zip>
            <a:lsCMRN />
            <a:order>1325661</a:order>
          </a:CertMailReceiptNumbers>
          <a:CertMailReceiptNumbers>
            <a:AccountNumber>10</a:AccountNumber>
            <a:Address1>121 Mant Drive</a:Address1>
            <a:Address2>TestCity  Test  123456</a:Address2>
            <a:City> TestCity </a:City>
            <a:Name1>Kris </a:Name1>
            <a:Name2 i:nil="true" />
            <a:OrderNumber />
            ***<a:Password />
            <a:ReturnCode>0</a:ReturnCode>
            <a:ReturnMessage i:nil="true" />
            <a:SoftwareID />***
            <a:State>Test</a:State>
            <a:TrackingStatus>MAILED</a:TrackingStatus>
            <a:USPSReceipt>71926389000026</a:USPSReceipt>
            ***<a:UserID />***
            <a:Zip>123456</</a:Zip>
            <a:lsCMRN />
            <a:order>1325661</a:order>
          </a:CertMailReceiptNumbers>
          <a:CertMailReceiptNumbers>
            <a:AccountNumber>2</a:AccountNumber>
            <a:Address1>121 Technot</a:Address1>
            <a:Address2>Test  Tst  123456</a:Address2>
            <a:City>Test</a:City>
            <a:Name1>Alice</a:Name1>
            <a:Name2 i:nil="true" />
            <a:OrderNumber />
            ***<a:Password />
            <a:ReturnCode>0</a:ReturnCode>
            <a:ReturnMessage i:nil="true" />
            <a:SoftwareID />***
            <a:State>Tst</a:State>
            <a:TrackingStatus>MAILED</a:TrackingStatus>
            <a:USPSReceipt>7192638900000033</a:USPSReceipt>
            ***<a:UserID />***
            <a:Zip>123456</</a:Zip>
            <a:lsCMRN />
            <a:order>1325661</a:order>
          </a:CertMailReceiptNumbers>
          <a:CertMailReceiptNumbers>
            <a:AccountNumber>3</a:AccountNumber>
            <a:Address1>194 Green st</a:Address1>
            <a:Address2>Matt  MA  123456</a:Address2>
            <a:City>Matt</a:City>
            <a:Name1>Jewel Bondurant</a:Name1>
            <a:Name2 i:nil="true" />
            <a:OrderNumber />
            ***<a:Password />
            <a:ReturnCode>0</a:ReturnCode>
            <a:ReturnMessage i:nil="true" />
            <a:SoftwareID />***
            <a:State>MA</a:State>
            <a:TrackingStatus>MAILED</a:TrackingStatus>
            <a:USPSReceipt>71926389001000000040</a:USPSReceipt>
            ***<a:UserID />***
            <a:Zip>123456</</a:Zip>
            <a:lsCMRN />
            <a:order>1325661</a:order>
          </a:CertMailReceiptNumbers>
          <a:CertMailReceiptNumbers>
            <a:AccountNumber>4</a:AccountNumber>
            <a:Address1>123  Nasas</a:Address1>
            <a:Address2>Mtar  Tst  123456</a:Address2>
            <a:City>Mtar</a:City>
            <a:Name1>Terry </a:Name1>
            <a:Name2 i:nil="true" />
            ***<a:OrderNumber />
            <a:Password />
            <a:ReturnCode>0</a:ReturnCode>
            <a:ReturnMessage i:nil="true" />
            <a:SoftwareID />***
            <a:State>Tst</a:State>
            <a:TrackingStatus>MAILED</a:TrackingStatus>
           a:USPSReceipt>7192630000057</a:USPSReceipt>
            ***<a:UserID />***
            <a:Zip>123456</</a:Zip>
            <a:lsCMRN />
            <a:order>1325661</a:order>
          </a:CertMailReceiptNumbers>
        </a:lsCMRN>
        <a:order>0</a:order>
      </GetCertMailReceiptNumbersResult>
    </GetCertMailReceiptNumbersResponse>

1 个答案:

答案 0 :(得分:1)

向我们展示您作为WCF服务响应发回的课程!没有它们,它充其量只是猜谜游戏......

您可以在属性上放置某些与DataContract相关的属性,以便在WCF中的序列化过程中包含或排除它们。

基本上,对于.NET 3.5 SP1中的WCF,您不必必须专门用特殊属性标记您的类及其属性。如果不这样做,DataContract序列化程序将像XML序列化程序一样:所有公共属性都被序列化。

如果您不想在序列化中包含某些属性,那么您实际上无法选择

  • [DataContract]属性放在您的课​​程上,
  • [DataMember]属性放在您希望序列化的字段和属性

然后,您将不会使用[DataMember]属性装饰任何内容,并且不会将其包含在WCF响应消息中。

所以在你的情况下,你必须做类似的事情

[DataContract]
class GetCertMailReceiptNumbersResult
{
    // no DataMember attribute --> will not be included!
    int AccountNumber {get;set;}
    string Address1 {get;set;}
   ......
    string Password {get;set;}

    // here, include DataMember attributes --> will be included
    [DataMember]
    int ReturnCode {get;set;}
    [DataMember]
    string ReturnMessage {get;set;}

    // and so forth
 }

基本上,对于WCF服务中的每种类型,您需要决定要包含哪些字段和属性 - 标记具有[DataMember]属性的字段和属性。 中的任何其他内容都不会包含在您的序列化邮件中。