我在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>
答案 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]
属性的字段和属性。 中的任何其他内容都不会包含在您的序列化邮件中。