Webservice 接口 如下:
 [WebMethod]
public  void SetCacheValue(string key, object value)
{
    Cache.Insert(key,value);
}在客户端有如下的调用:
WebserviceInterface.ClassName i = new WebserviceInterface.ClassName();
ClassEntityA entityA = new ClassEntityA();
entityA.strA = "a";
ClassEntityB entityB = new ClassEntityB();
entityB .intA = 205;
ClassEntityC entityC = new ClassEntityC();
entityC .floatA = 1.25;
i.SetCacheValue("key1",entityA);
i.SetCacheValue("key2",entityB);
i.SetCacheValue("key3",entityC);public class ClassEntityA()
{
   public string strA ;
}
public class ClassEntityB()
{
   public int intA;
}
public class ClassEntityC()
{
   public float floatA;
}
怎么在保证调用同一个webservice的接口时,序列化自定义类参数呀.
大伙帮帮忙呀!

解决方案 »

  1.   

    ClassEntryA,B,C全都是客户端定义的。无法传到服务器端。
      

  2.   

    服务器也要定义ClassEntityA,ClassEntityB和ClassEntityC的
      

  3.   

    不应为数据协定名称为“D_Config_GlobleConfig:http://schemas.datacontract.org/2004/07/TGS.Data”的类型“TGS.Data.D_Config_GlobleConfig”。
    请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。 出现这样的而错误是什么原因呀?
      

  4.   

    ClassEntityA,ClassEntityB和ClassEntityC 都在 TGS.Data 名称空间下.
    服务端也引用了这个命名空间!
    我的Webservice也创建在同一样项目内!
      

  5.   

    在Web方法上声明特性:KnownTypeAttribute[KnownType(typeof(ClassEntityA))]依次类推
      

  6.   

    在Webservice的方法上?
    Webservice的方法上的object value参数,可以是接受的客户端的 ClassEntityA 或者是 ClassEntityB 或者是 ClassEntityC
    那怎么办???????
      

  7.   

    KnownType应该没法加在方法上[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct, Inherited = true, 
    AllowMultiple = true)]
    public sealed class KnownTypeAttribute : Attribute
      

  8.   

    可以试一试使用WCF的DataContract.ClassEntityA,ClassEntityB和ClassEntityC的就继承自一个基类BaseClass
    然后 用KnownType[DataContract]
    [KnownType(typeof(ClassEntityA ))
    [KnownType(typeof(ClassEntityB ))
    [KnownType(typeof(ClassEntityC ))
    class BaseClass
    {
    }
    [DataContract]
    class ClassEntityA : BaseClass
    {..}
    [DataContract]
    class ClassEntityB : BaseClass
    {..}
    [DataContract]
    class ClassEntityC : BaseClass
    {..}然后函数声明的时候就可以使用基类了public void SetCacheValue(string key, BaseClass value)
    以上代码没有经过编译及测试,可能有些许错误。