Kahbazi
Kahbazi

Reputation: 15005

Convert PHP Array To C# Array

I'm using a web service that gets some phone numbers in php array as below :

$to=array("phoneNumbers"=>array('a','b'));

I need to Use this web service in C# but I don't know how to Convert the $to variable to C# I already try

new string[] {"a","b"}
new string[] {"phoneNumbers","a","b"}
new string[][] {"phoneNumbers",new string[]{"a","b"}}

None of them is working

This is how I call the web service in PHP

//call soap client
$soap=new SoapClient("http://www.zamanak.ir/api/soap-v3?wsdl");

//get clientId and client Secret from Zamanak.ir
$soap->clientId="";
$soap->clientSecret="";

//add your username and password
$soap->username="";
$soap->password="";

//get authentication
$array = $soap->authenticate($soap->clientId,$soap->clientSecret,$soap->username,$soap->password);
$uid =$array['uid'];
$token =$array['token'];
$to=array("phoneNumbers"=>array('09121232131','091212313221','091254545545'));
$r=$soap->calculateCost( $soap->clientId, $soap->clientSecret, $uid, $token,'iran',$to, '3880', $repeatTotal = 1);
var_export($r);
die;

Upvotes: 0

Views: 1511

Answers (1)

michalh
michalh

Reputation: 2997

I would say it is crating an associative array, so in C# it should be something like this:

Dictionary<String, String[]> array = new Dictionary<String, String[]>
{
    { "phoneNumbers", new String[]{"a","b"} }
};

then you access it like

array["phoneNumbers"][0] //returns "a"

If you need to use it in a web service you will need a serializable generic dictionary like the one mentioned here.

so my example web service would look something like:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Xml.Serialization;

namespace WcfService1
{
    [XmlRoot("dictionary")]
    public class SerializableDictionary<TKey, TValue>
        : Dictionary<TKey, TValue>, IXmlSerializable
    {
        #region IXmlSerializable Members
        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

            bool wasEmpty = reader.IsEmptyElement;
            reader.Read();

            if (wasEmpty)
                return;

            while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
            {
                reader.ReadStartElement("item");

                reader.ReadStartElement("key");
                TKey key = (TKey)keySerializer.Deserialize(reader);
                reader.ReadEndElement();

                reader.ReadStartElement("value");
                TValue value = (TValue)valueSerializer.Deserialize(reader);
                reader.ReadEndElement();

                this.Add(key, value);

                reader.ReadEndElement();
                reader.MoveToContent();
            }
            reader.ReadEndElement();
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

            foreach (TKey key in this.Keys)
            {
                writer.WriteStartElement("item");

                writer.WriteStartElement("key");
                keySerializer.Serialize(writer, key);
                writer.WriteEndElement();

                writer.WriteStartElement("value");
                TValue value = this[key];
                valueSerializer.Serialize(writer, value);
                writer.WriteEndElement();

                writer.WriteEndElement();
            }
        }
        #endregion
    }

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string calculateCost(SerializableDictionary<String, String[]> to);        
    }

    public class Service1 : IService1
    {
        public string calculateCost(SerializableDictionary<String, String[]> to)
        {
            StringBuilder output = new StringBuilder();
            foreach (KeyValuePair<String, String[]> item in to)
            {
                output.AppendLine(string.Format("{0} => {1}", item.Key, String.Join(",", item.Value)));
            }
            return output.ToString();
        }      
    }
}

Upvotes: 1

Related Questions