2013-07-16 5 views
6

में शून्य सदस्यों के क्रमिकरण को रोकें मुझे यह कहकर प्रस्ताव दें कि मैं डब्ल्यूसीएफ के लिए बिल्कुल नया हूं, और यहां पर गलत शब्दावली का उपयोग कर सकता हूं।DataContractSerializer

  1. अनुलग्नक के लिए कक्षाओं युक्त DLL, एक्सटेंशन, प्रासंगिक वस्तुओं में XML दस्तावेज़ के रूप में deserializes ReportType1, और ReportType2
  2. एक WCF एक OperationContract साथ नीचे बताए गए के रूप में ServiceContract, तो serializes: मेरा परियोजना के दो घटक हैं यह फिर से जेएसओएन या एक्सएमएल ग्राहक के रूप में वापस आ गया है।

मैं एक XML स्कीमा कि ऐसा दिखाई देता है:

<?xml version="1.0" encoding="windows-1252"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xsd:element name="Attachment"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="Extension" type="Extension" minOccurs="0" /> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:complexType> 
     <xsd:sequence name="Extension"> 
      <xsd:any processContents="skip" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

इस स्कीमा के बाद, मैं निम्नलिखित प्रकार के एक XML दस्तावेज है:

<Attachment> 
    <Extension> 
     <ReportType1> 
      <Name>Report Type 1 Example</Name> 
     </ReportType1> 
    </Extension> 
</Attachment> 

मुझे मिल गया है संकलित डीएलएल में निम्नलिखित कक्षाएं:

public class Attachment 
{ 
    public Extension Extension { get; set; } 
} 

public class Extension 
{ 
    [XmlElement(ElementName = "ReportType1", IsNullable = false)] 
    public ReportType1 ReportType1 { get; set; } 

    [XmlElement(ElementName = "ReportType2", IsNullable = false)] 
    public ReportType2 ReportType2 { get; set; } 
} 

मेरा डब्ल्यूसीएफ एस ervice ऊपर वस्तुओं में XML दस्तावेज़ deserializes, और फिर निम्न OperationContract के माध्यम से JSON प्रारूप में यह रिटर्न: JSON

{ 
    'Attachment': { 
     'Extension': { 
      'ReportType1': { ... }, 
      'ReportType2': null 
     } 
    } 
} 

XML के रूप में वास्तविक उत्पादन के रूप में

[OperationContract] 
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
Attachment Search(); 

वास्तविक उत्पादन

<Attachment> 
    <Extension> 
     <ReportType1>...</ReportType1> 
     <ReportType2 i:nil="true"></ReportType2> 
    </Extension> 
</Attachment> 

जेएसओ के रूप में वांछित आउटपुट एन

{ 
    'Attachment': { 
     'Extension': { 
      'ReportType1': { ... } 
     } 
    } 
} 

XML के रूप में वांछित आउटपुट

<Attachment> 
    <Extension> 
     <ReportType1>...</ReportType1> 
    </Extension> 
</Attachment> 

DLL से कक्षाएं DataContract विशेषता नहीं है, लेकिन ठीक जब मेरे OperationContract से वापस भेजा जा रहा है क्रमानुसार करने, के रूप में लग रहा उपर्युक्त परिणाम प्राप्त करें।

मैं यह कैसे कह सकता हूं कि तत्वों को जेएसओएन/एक्सएमएल में क्रमबद्ध करने के लिए नहीं, अगर वे डीएलएल से कक्षाओं को DataContract कक्षा में बदलने की क्षमता के बिना शून्य हैं? क्या मुझे डीएलएल से कक्षाओं का उत्तराधिकारी होना चाहिए, और किसी भी तरह उन्हें DataContract के रूप में ओवरराइड करना चाहिए? यदि हां, तो मैं बेस क्लास के मौजूदा सदस्यों पर विशेषताओं को कैसे सेट कर सकता हूं?

अगर मुझे अधिक जानकारी की आवश्यकता है तो कृपया मुझे बताएं, और मैं इसे आपूर्ति करने के लिए अपनी पूरी कोशिश करूंगा।

+0

[कस्टम क्रमांकन-साथ-DataContractSerializer] (http पर एक नजर है।कॉम/प्रश्न/3156312/कस्टम-सीरियलाइजेशन-साथ-डेटाकॉन्ट्राक्टेरियलाइज़र) सम्मान। –

+0

मैंने पाया [यह SO सवाल] (http://stackoverflow.com/questions/5685045/how-to-not-return-null-when-a-data-member-field-is-not-set-in-the -डेटा-अनुबंध) जो मैं करता हूं, लेकिन मुझे डीएलएल में कक्षाओं को सजाने की आवश्यकता होगी - जो मेरे दायरे से बाहर है। यहां समस्या का हिस्सा डीएलएल में मौजूद कक्षाओं को संशोधित करने में सक्षम नहीं है। – crush

उत्तर

-1

आप पैटर्न के साथ एक फ़ंक्शन बना सकते हैं {PropertyName} जो XmlSerializer को बताता है अगर इसे सदस्य को क्रमबद्ध करना चाहिए या नहीं। // stackoverflow:

check this question

संबंधित मुद्दे