繁体   English   中英

包装器集合的IXmlSerializable命名空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM