none
请教下hashtable序列化的问题。 RRS feed

  • 问题

  • 请问下在客户端向服务器端传送hashtable类型参数,出现错误提示如下:

    尝试对参数 http://tempuri.org/ 进行序列化时出错: param。InnerException 消息是“数据协定名称为“ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays”的类型“System.Collections.Hashtable”不是所需的类型。请将未知的类型以静态方式添加到已知类型的列表,例如,通过使用 KnownTypeAttribute 属性或通过将其添加到传递给 DataContractSerializer 的已知类型的列表等方法。” 。

    请教下hashtable如何进行序列化

    2010年5月24日 6:34

答案

  • 由于Hashtable并不是强类型的,它内部实际使用object来存储,所以当数据传输到另一端时,并不能正确判断其元素类型并反序列化。需要给包含Hashtable类型属性的类加上KnownType attribute来指定实际的类型。如:

    [DataContract]
    public class Book { }
    
    [DataContract]
    public class Magazine { }
    
    [DataContract]
    [KnownType(typeof(Book))]
    [KnownType(typeof(Magazine))]
    public class LibraryCatalog
    {
      [DataMember]
      System.Collections.Hashtable theCatalog;
    }

    详见http://msdn.microsoft.com/en-us/library/ms730167.aspx

    谢谢!

    • 已标记为答案 Mog Liang 2010年5月31日 8:41
    2010年5月24日 7:08

全部回复

  • 由于Hashtable并不是强类型的,它内部实际使用object来存储,所以当数据传输到另一端时,并不能正确判断其元素类型并反序列化。需要给包含Hashtable类型属性的类加上KnownType attribute来指定实际的类型。如:

    [DataContract]
    public class Book { }
    
    [DataContract]
    public class Magazine { }
    
    [DataContract]
    [KnownType(typeof(Book))]
    [KnownType(typeof(Magazine))]
    public class LibraryCatalog
    {
      [DataMember]
      System.Collections.Hashtable theCatalog;
    }

    详见http://msdn.microsoft.com/en-us/library/ms730167.aspx

    谢谢!

    • 已标记为答案 Mog Liang 2010年5月31日 8:41
    2010年5月24日 7:08
  • 请问,这个再服务器端配置?

    2010年5月24日 8:39
  • 是的,您的数据实体类肯定是在服务端定义的啊,然后客户端一般通过添加服务引用的方式,可以获得该类型的信息,之后才能开始使用这个类型。若是服务端不知道的类型,是不能直接通过转为object对象的形式传输的。
    2010年5月24日 9:11
  • HashTable序列化可能有问题,要自己手写序列化方法,把类型转化一次啊了。

    因为Key和Value,Value是Object类型,所以可能存在不能序列化的问题。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【中文论坛】:微软WCF中文技术论坛
    【英文论坛】:微软WCF英文技术论坛

    2010年5月25日 10:42
    版主
  • 转换成 Dictionary<TKey,TValue>.
    2010年5月27日 9:15