【发布时间】:2013-04-18 11:37:11
【问题描述】:
我们有一个 WCF 服务,它在服务的根级别包含 DataContract 和 DataMember 的合同中包含 Serializable 类。
在尝试构建解决方案以隔离问题时,我遇到了以下问题:
[ServiceContract]
public interface IService1
{
[OperationContract]
CompositeType GetDataUsingDataContract();
}
[DataContract]
public class CompositeType
{
[DataMember]
public MyType MyProperty { get; set; }
}
[Serializable]
public class MyType
{
private int amount1;
[XmlElement(Form = XmlSchemaForm.Unqualified, DataType = "int", ElementName = "AmountN")]
public int Amount1
{
get
{ return amount1; }
set
{ amount1 = value; }
}
}
给出以下 xsd:
<xs:complexType name="CompositeType">
<xs:sequence>
<xs:element name="MyProperty" type="tns:MyType" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType><xs:element name="CompositeType" type="tns:CompositeType" nillable="true"/>
<xs:complexType name="MyType">
<xs:sequence>
<xs:element name="amount1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:element name="MyType" type="tns:MyType" nillable="true"/>
</xs:schema>
问题是:为什么私有成员而不是公共成员被序列化?
【问题讨论】:
-
非常老的问题,但对于那些想要像旧的 asp.net Web 服务这样的序列化的人可以使用 [XmlSerializerFormat] 属性,如下面的链接所示。 developersalley.com/blog/post/2014/08/02/…
标签: wcf serialization xsd