讓我先說我對WCF相當陌生,並且可能會在這裏使用錯誤的術語。我的項目有兩個組成部分:防止DataContractSerializer中的空成員序列化
- 一個包含附件類DLL,擴展,ReportType1和ReportType2
- 一個WCF的ServiceContract與OperationContract的如下面描述反序列化的XML文檔轉換成相關的對象,再序列它再次以JSON或XML的形式返回給客戶端。
我有一個類似如下的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>
我已經得到了編譯後的DLL中的以下類:
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; }
}
My WCF s ervice反序列化XML文檔轉換成上述目的,然後通過以下OperationContract的JSON格式返回它:
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest)]
Attachment Search();
實際輸出作爲JSON
{
'Attachment': {
'Extension': {
'ReportType1': { ... },
'ReportType2': null
}
}
}
實際輸出作爲XML
<Attachment>
<Extension>
<ReportType1>...</ReportType1>
<ReportType2 i:nil="true"></ReportType2>
</Extension>
</Attachment>
所需輸出爲JSO ñ
{
'Attachment': {
'Extension': {
'ReportType1': { ... }
}
}
}
所需的輸出爲XML
<Attachment>
<Extension>
<ReportType1>...</ReportType1>
</Extension>
</Attachment>
從DLL類不具備DataContract
屬性,但似乎序列化就好了,當從我OperationContract
被髮送回,因爲我得到上述結果。
如何告訴它不要將元素序列化爲JSON/XML,如果它們爲空而無法將類從DLL轉換爲DataContract
類?我應該從DLL中繼承類,並以某種方式覆蓋它們爲DataContract
?如果是這樣,那麼我怎麼才能在基類的現有成員上設置屬性呢?
請讓我知道是否需要更多信息,我會盡我所能提供。
看看[自定義序列化與 - DataContractSerializer的(HTTP://計算器。com/questions/3156312/custom-serialization-with-datacontractserializer) 此致敬禮。 –
我發現[這個SO問題](http://stackoverflow.com/questions/5685045/how-to-not-return-null-when-a-data-member-field-is-not-set-in-the -data-contract),它完成了我之後的工作,但它需要我修飾DLL中的類 - 這超出了我的範圍。這裏的部分問題是無法修改DLL中的類。 – crush