Пользовательская (IDictionary) Сериализация XML для SOAP / asmx / WebMethods? - PullRequest
1 голос
/ 12 февраля 2009

Используя ASP.NET WebServices, по умолчанию вы не можете передавать никакие объекты IDictionary, потому что сериализация xml для словарей не поддерживается. Я нашел различные способы сериализации словарей (http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx, http://blogs.msdn.com/psheill/archive/2005/04/09/406823.aspx, http://www.mattberther.com/2004/06/14/serializing-an-idictionary-object/), но я не могу найти способ подключить это к веб-методам Asp.NET.

Есть ли способ подключить его, чтобы я мог использовать словари с WebMethods?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2009

Вопрос - куда вы хотите передать словарь? Если вы просто хотите научить свой сервис сериализации словаря, то реализуйте интерфейс IXmlSerializable в своем классе словаря и сериализуйте его так, как вам нравится.

Проблема будет на клиенте. Как клиент Java должен десериализовать то, что вы отправили? В таком случае, как клиент .NET узнает, как это сделать? При использовании старых веб-сервисов ASMX нет никакого способа заставить клиента делать что-то особенное. Это одна из многих причин, по которой был изобретен WCF.

0 голосов
/ 12 февраля 2009

зависит от того, как вы вызываете эти методы, мы используем метод .net 2.0 с «веб-ссылками», и вы заметите, что сгенерированный класс WSDL является частичным, мы создаем файл (имя веб-ссылки) .cs что-то вроде:


public partial class WebReferenceName : System.Web.Services.Protocols.SoapHttpClientProtocol 
{
    // Overload the WSDL generated method that only takes a simple array
    public ReturnType MethodName(List  collection)
    {
        // redirect the call to the wsdl generated method with the appropriate parameters
        return this.MethodName(collection.ToArray());
    }
}

Перегрузка позволит вам вызывать имя метода с любым типом коллекции

На стороне веб-службы вы можете конвертировать из простой коллекции обратно в более мощную коллекцию, скорее всего, с использованием этого более мощного ctor коллекций. Один из ctors, вероятно, будет использовать простую коллекцию.

...