XML-файл ответа веб-службы WCF - PullRequest
3 голосов
/ 09 марта 2010

Я использую контракт данных в 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 Ответ

1 голос
/ 09 марта 2010

Покажите нам ваши классы, которые отправляются обратно в ответ от вашей службы WCF! Без них это в лучшем случае игра в догадки ....

Вы можете поместить определенные атрибуты, связанные с DataContract, в свойства, чтобы включить или исключить их из процесса сериализации в WCF.

По сути, с WCF в .NET 3.5 SP1 вам не нужно специально специально маркировать ваши классы и их свойства специальными атрибутами. Если вы этого не сделаете, сериализатор 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]. Все остальное не будет включено в ваше сериализованное сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...