我的服务有这样的方法
[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;
}
我做错了什么?我该如何解决这个问题?
答案 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;}
}