WCF Словарь <строка, объект> сериализация - PullRequest
0 голосов
/ 20 января 2011

У меня есть сервис, у которого есть такой метод

  [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 craches с этой ошибкой:

Произошла ошибка при попытке параметр сериализации: myarray. Сообщение InnerException было «Тип «System.Collections.Generic.Dictionary`2 [[System.String, mscorlib, версия = 2.0.5.0, Culture = нейтрально, PublicKeyToken = 7cec85d7bea7798e], [System.Object, mscorlib, версия = 2.0.5.0, Culture = нейтрально, 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;
            }

что я сделал не так? как я могу это исправить?

1 Ответ

0 голосов
/ 20 января 2011

Параметр myArray и возвращаемое значение должны быть строго типизированы и иметь атрибуты DataContract и DataMember.MyArray должен быть коллекцией, подобной IEnumerable , которую можно сериализовать:

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

    [DataMember]
    public double Cost {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...