使用NameValueCollection的WCF序列化问题

kaz*_*aze 5 c# wcf serialization

我正在尝试通过WCF序列化NameValueCollection.我不断收到异常,告诉我要一个接一个地添加一个类型.添加它们后,我终于得到了

类型'System.Object []'无法添加到已知类型列表中,因为另一个类型'System.Collections.ArrayList'具有相同的数据协定名称' http://schemas.microsoft.com/2003/10/Serialization/Arrays :ArrayOfanyType '已存在.

合同现在看起来像这样:

[KnownType(typeof(NameValueCollection))]
[KnownType(typeof(CaseInsensitiveHashCodeProvider))]
[KnownType(typeof(CaseInsensitiveComparer))]
[KnownType(typeof(string[]))]
[KnownType(typeof(Object[]))]
[KnownType(typeof(ArrayList))]
[DataContract]
public class MyClassDataBase
{
    [DataMember]
    public NameValueCollection DataCollection = new NameValueCollection();
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道如何能够序列化我的NameValueColletion.

另一个奇怪的事情是编译器警告不推荐使用CaseInsensitiveHashCodeProvider.

Joh*_*ers 9

最好的想法是停止使用类似NameValueCollection和的弱类型ArrayList.使用Dictionary<string,string>List<T>替代.

  • @micahhoover你永远无法干净地序列化所有.NET类型.SOAP基础结构(WSDL和XSD)无法描述每个类的所有语义.此外,我编辑了帖子,因此您可以看到我打算使用具体的泛型类型.例如,`ArrayList`与`List <object>`几乎相同,它给调用者没有关于列表中的对象类型的信息. (2认同)