2014-01-10 3 views
1

У меня есть пользовательскую библиотеку XML RPC Я разработанный в C#, глядя на мини-спецификации на этом сайте:XML RPC Эквивалент словаря

http://xmlrpc.scripting.com/spec.html

Он не имеет каких-либо объяснений того, как сериализовать словарь скаляров для XML. К счастью для меня, до сих пор, мое клиентское приложение .NET, написанное на C#, не нужно было отправлять словарь в качестве параметра метода. Но сейчас.

Сервер, на который я звоню, также имеет SOAP-клиент для разработчиков PHP. Я использовал этот SOAP-клиент для вызова указанного метода на сервере (тот, который нуждается в словаре), просто чтобы увидеть полезную нагрузку XML, чтобы я мог имитировать его.

Однако, поскольку он встроен в конверт SOAP, я предполагаю, что он будет немного отличаться от того, что мне нужно было бы отправить, если бы я использовал простой XML RPC, а не SOAP.

Я хочу отправить Dictionary<int, int>. И вот что содержит конверт SOAP для словарной части.

<item xsi:type="ns2:Map"> 
    <item> 
    <key xsi:type="xsd:int">609</key> 
    <value xsi:type="xsd:int">1</value> 
    </item> 
</item> 

Итак, я действительно ищу эквивалент RPC XML.

ответ

0

Я только что отправил словарь как <struct> в соответствии с определением, указанным в ссылке, упомянутой в первоначальном посте, и это сработало.

До этого я только сериализовал пользовательские POCO на <struct>.

1

Как насчет использования DataContractSerializer? В конечном итоге он сериализует типы .NET (большинство из них) в формате SOAP. Он должен сериализовать словарь таким образом, чтобы его можно было включить в тело SOAP. http://msdn.microsoft.com/en-us/library/ms752244(v=vs.110).aspx

+0

Теперь я вижу, что вы пытались сказать. Я думаю, вы предполагаете, что я использую 'XmlSerializer' в пространстве имен' System.Xml', потому что у него тоже есть проблемы с сериализацией словарей. Не я. Я использую простой парсер, который я написал себе, чтобы читать узлы XML и простой «TextWriter» для создания узлов XML RPC из словаря, который указан в ссылке, о которой я упоминал. –