【问题标题】:WCF Dictionary<string, object> serializationWCF 字典<string, object> 序列化
【发布时间】:2011-01-20 14:28:58
【问题描述】:

我的服务有这样的方法

  [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MyService
    {
        [OperationContract]
        public object MyMethod(string param1, string param2, object[] myarray)
        {
            //do stuff
            return result;
        }
     }

我像这样从我的代码中调用我的方法:

public Dictionary<string, object> MyDictionary{ get; set; }
serv.MyMethodCompleted += new EventHandler<MyServiceReference.MyMethodCompletedEventArgs>(serv_MyMethodCompleted);
serv.MyMethodAsync("param1","param2",  new ObservableCollection<object>(){MyDictionary});


void serv_MyMethodCompleted(object sender, MyServiceReference.MyMethodCompletedEventArgs e)
{
    //Happy happy joy joy
}

出现此错误的所有崩溃:

尝试执行时出错 序列化参数:myarray.这 InnerException 消息为“类型” 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib,版本=2.0.5.0, 文化=中性, PublicKeyToken=7cec85d7bea7798e],[System.Object, mscorlib,版本=2.0.5.0, 文化=中性, PublicKeyToken=7cec85d7bea7798e]]' 带有数据合同名称 'ArrayOfKeyValueOfstringanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 预计不会。添加任何类型不 静态已知到已知列表 类型 - 例如,通过使用 KnownTypeAttribute 属性或由 将它们添加到已知类型列表中 传递给 DataContractSerializer。'。 请参阅 InnerException 了解更多信息 详情。

 public System.IAsyncResult BeginCallMethod(string param1, string param2, System.Collections.ObjectModel.ObservableCollection<object> myarray, System.AsyncCallback callback, object asyncState) {
                object[] _args = new object[3];
                _args[0] = param1;
                _args[1] = param2;
                _args[2] = myarray;
                System.IAsyncResult _result = base.BeginInvoke("MyMethod", _args, callback, asyncState); <--here it craches
                return _result;
            }

我做错了什么?我该如何解决这个问题?

【问题讨论】:

    标签: silverlight serialization wcf


    【解决方案1】:

    myArray 参数和返回值需要是强类型并带有 DataContract 和 DataMember 属性。 myArray 应该是像 IEnumerable 这样可以序列化的集合:

    [DataContract]
    class Item
    {
        [DataMember]
        public string Name {get;set;}
    
        [DataMember]
        public double Cost {get;set;}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多