Serialization 将DataMember添加到DataContract的其他命名空间
使用Serialization 将DataMember添加到DataContract的其他命名空间,serialization,namespaces,datacontract,datacontractserializer,datamember,Serialization,Namespaces,Datacontract,Datacontractserializer,Datamember,使用XmlSerializer我可以将我的成员放在父类型的不同名称空间中 我可以对DataContractSerializer执行同样的操作吗 我想要以下XML: <h:Type xmlns:h="http://schemas.e.com/WebServices" xmlns="http://schemas.e.com/WebServices"> <Member xmlns="http://schemas.e.com/CoreTypes">0</Memb
XmlSerializer
我可以将我的成员放在父类型的不同名称空间中
我可以对DataContractSerializer
执行同样的操作吗
我想要以下XML:
<h:Type xmlns:h="http://schemas.e.com/WebServices"
xmlns="http://schemas.e.com/WebServices">
<Member xmlns="http://schemas.e.com/CoreTypes">0</Member>
</h:Type>
0
这在使用
DataContractSerializer
时可能吗?您可以在不同的命名空间中定义子datacontract,并将其用作另一个datacontract的成员,但无法控制单个成员名称和/或形状。DataContractSerializer
并不打算取代XmlSerializer
,以便对XML的“形状”进行细粒度控制。虽然如中所述,特定数据契约类型不能在多个名称空间中声明成员,但在类型层次结构中,<,派生类型可以属于与其继承的基类型不同的数据协定命名空间。发生这种情况时,每个成员都将被序列化到声明它的命名空间中。通过构造适当的类型层次结构,成员位于不同名称空间中的XML实体可以由DataContractSerializer
进行(反)序列化
具体规定如下:
DataContractSerializer
不允许在反序列化期间自由重新排序数据成员。2DerivedType
使用:
[DataContract(Name = "Base", Namespace = "http://schemas.e.com/CoreTypes")]
public class BaseType
{
[DataMember]
public int Member { get; set; }
}
[DataContract(Name = "Type", Namespace = "http://schemas.e.com/WebServices")]
public class DerivedType : BaseType
{
}
而且,一般来说,可以通过应用上述规则构造适当的类型层次结构来获得任意名称空间序列中的任意XML元素序列,从而提供一种解决方案,满足对不同名称空间中的元素进行反序列化的要求
当然,由于其他原因,这种层次结构可能不方便,在这种情况下,可以使用该机制替换首选的数据模型类型
一,
2那么你是说这件事做不到吗?或者它可以,但不应该。我应该继续使用XmlSerializer吗?基本上。DataContracts并不是为精细控制而设计的——当管道的两侧都是WCF时,它们是为了“快速、简单和可重复”。XmlSerializer和WCF相处得很好-默认情况下它只使用DataContractSerializer。