[英]IXmlSerializable Namespace of Wrapper Collection
我正在通过使用IXmlSerializable
接口使用DataContractSerializer
进行一些自定义序列化。
例如:
public class CustomPartOfAContract : IXmlSerializable
{
public void WriteXml( XmlWriter writer )
{
//...
}
public void ReadXml( XmlReader reader )
{
//...
}
}
[DataContract(Namespace="http://mynamespace.com")]
public class MyDataContract
{
[DataMember(IsRequired=true)]
public ICollection<CustomPartOfAContract> CustomParts { get; set; }
}
现在,在WriteXml
方法中,我可以告诉XmlWriter
我要写入的每个元素要使用的命名空间。 但是我不知道如何为CustomPartOfAContract
指定名称空间。
将XML输出到文件,从源代码名称空间生成MyDataContract
CustomParts
属性的名称空间。
有人知道我如何指定序列化该名称空间时使用的名称空间吗?
好的,我通过添加一个从Collection
继承的自定义集合类并使用正确的命名空间应用[CollectionDataContract]
属性来解决此问题:
[CollectionDataContract( Namespace="http://mynamespace.com" )]
public class MyCustomPartsCollection : Collection<CustomPartOfAContract>
{
public MyCustomPartsCollection()
{
// We need a default constructor or the serializer complains.
}
}
然后在我的数据合同中使用它:
[DataContract(Namespace="http://mynamespace.com")]
public class MyDataContract
{
[DataMember(IsRequired=true)]
public MyCustomPartsCollection CustomParts { get; set; }
}
这似乎是将正确的名称空间应用于集合类,而不是从源代码中获取名称空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.