WCF字典<string,object =“”>序列化</string,>

时间:2011-01-20 14:28:59

标签: silverlight serialization wcf

我的服务有这样的方法

  [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
}

Everithing犯了这个错误:

  

尝试时出错   序列化参数:myarray。该   InnerException消息是'Type   “System.Collections.Generic.Dictionary`2 [[System.String,   mscorlib,版本= 2.0.5.0,   文化=中性,   公钥= 7cec85d7bea7798e],[System.Object的,   mscorlib,版本= 2.0.5.0,   文化=中性,   公钥= 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;
            }

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

1 个答案:

答案 0 :(得分:0)

myArray参数和返回值需要是强类型的,并且使用DataContract和DataMember属性进行归因。 myArray应该是IEnumerable&lt; Item&gt;之类的集合。可以序列化:

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

    [DataMember]
    public double Cost {get;set;}
}