让我先说我对 WCF 相当陌生,并且可能在这里使用了错误的术语。我的项目有两个组件:
- 包含 Attachment、Extension、ReportType1 和 ReportType2 类的 DLL
- 具有如下所述的 OperationContract 的 WCF ServiceContract 将其作为 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; }
}
我的 WCF 服务将 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>
所需输出为 JSON
{
'Attachment': {
'Extension': {
'ReportType1': { ... }
}
}
}
所需的 XML 输出
<Attachment>
<Extension>
<ReportType1>...</ReportType1>
</Extension>
</Attachment>
DLL 中的类没有该DataContract
属性,但是当我从我OperationContract
的 .
如果它们为空,而无法将 DLL 中的类转换为DataContract
类,我如何告诉它不要将元素序列化为 JSON/XML?我应该从 DLL 继承类,并以某种方式将它们覆盖为DataContract
?如果是这样,那么我如何在基类的现有成员上设置属性呢?
如果需要更多信息,请告诉我,我会尽力提供。