建议使用哪种C#通用结构将PHP数组转换为C#?

建议使用哪种C#通用结构将PHP数组转换为C#?,c#,php,arrays,C#,Php,Arrays,我们正在使用一个PHP Web服务。 我们已经在VisualStudio中使用AddWeb服务引用生成了WSDL getOurRequest服务方法需要“object”类型的输入参数 此方法的PHP文档在PHP中声明了以下数组 $getOurRequest =>array( `aaaa`=> ‘1111’, `bbbb`=> ‘2222’, `ccccArray`=> array( ‘cccc3333’

我们正在使用一个PHP Web服务。 我们已经在VisualStudio中使用AddWeb服务引用生成了WSDL

getOurRequest服务方法需要“object”类型的输入参数

此方法的PHP文档在PHP中声明了以下数组

$getOurRequest =>array( 
    `aaaa`=> ‘1111’,
    `bbbb`=> ‘2222’,
    `ccccArray`=> array(
            ‘cccc3333’
                ,‘cccc4444‘
),
    `ddddArray`=>array(
            'dddd5555'
            ,'dddd6666'
            )
);
我们如何将其转换为C#以用于调用PHP Web服务

任何有助于解决方案或通用可序列化结构的想法都将不胜感激


@Quetzalcatl感谢您提供var c#声明示例。这很有帮助,但它不会通过服务调用进行序列化。

我不知道您是如何调用PHP服务的,因此我的答案基于一个个人项目

我对创建SOAP服务之类的东西不感兴趣,因为C#不是我唯一交流的语言,我想保持简单。只需使用
HttpWebRequest
调用web服务器并分析页面输出

所以,我使用了JSON。詹姆斯·牛顿·金(James Newton King)有一个功能强大的图书馆,名为。它既可以将对象转换为JSON,也可以从JSON转换对象


在PHP方面,这些函数内置在PHP解释器中:并且。

直接回答您的问题,C#中最接近的可能结构是
字典,或者更确切地说,
字典

我实际上不理解notation
$getOurRequest=>array(…)。这里不应该是plain=而不是=>吗

无论哪种方式,在C#中,类似的变量声明将是:

var getOurRequest = new Dictionary<string, object>
{ 
  {"aaaa", "1111"},
  {"bbbb", "2222"},
  {"ccccArray", new string[] { "cccc3333", "cccc4444" } },
  {"ddddArray", new string[] { "dddd5555", "dddd6666" } }
);
只需确保取消对其中一个“属性”的注释,即datacontract/serializable。它们都告诉C#运行时允许对此类进行序列化,但它们都来自不同的库,或者更确切地说,来自.Net中的网络方法时代。一般来说,它们中的每一个都可以,但是其中一个更好,这取决于如何/从WSDL生成了什么、使用了什么.Net以及使用了什么额外的库。如果您使用的是“最先进的”.Net,那么选择DataContract

现在,你说你有WSDL?因此,右键单击您的项目并选择“添加服务引用”或“添加web引用”,然后在弹出对话框中输入WSDL的URL。创建者应该能够解析它,它将为该Web服务生成一系列支持类。假设它们被称为“MyPHPService”,它定义了一个名为“TheServiceMethodName”的操作:

var serv = new MyPHPService();
serv.TheServiceMethodName( tmp ); // just pass the object you have created earlier. Or a dictionary, or other..

如果您的WSDL是正确的,并且创建者对它的理解是正确的,那么对SOAP服务的调用只需要这两行代码

通常,告诉我们你真正想做什么,而不是你想怎么做,对你来说是有益的。这似乎相当可疑,并且可能不是您真正想要采取的方法。(有一个关联数组,其中它们的键是不同类型的。)您生成了WSDL吗?它可能是字符串数组的数组,而不是字符串或数组的数组吗?某些内部阵列的大小可能为1。如果你这样做了,那么你就会知道你的结果是什么类型的。我不知道C#,但我会考虑把它作为JSON从PHP中导出。那么你的问题是C#为解析JSON提供了什么。“我想这一定很简单。”谢谢你的建议。我将修改并更新这个问题。这家伙是不是给“JSON调整男人”命名了一个字谜?@ficuscr,看起来确实是!或者“JSON Tweeking Man”(拼写错误)感谢您的c#var声明。我正在用c#客户端编写代码来使用php web服务。我已经生成了WSDL,并且正在尝试传递上述示例结构中所需的对象参数。到目前为止,让这本词典序列化是徒劳的。再次感谢。我已经用一些关于对象和Web服务的信息更新了答案,非常感谢您的更新。这又有帮助了。我已将答案标记为已接受。
//[DataContract] - pick one of them
//[Serializable] - they are required, but without seeing your code, it is hard to tell which one
public class MyWebServiceParameter
{
    public string aaaa {get;set;} // those must be properties, not fields
    public string bbbb {get;set;}
    public string[] ccccArray {get;set;}
    public string[] ddddArray {get;set;}
}

....
var tmp = new MyWebServiceParameter
{
     aaaa = "1111", bbbb = "2222",
     ccccArray = new string[] { "....", "...." },
     ddddArray = new string[] { "....", "...." }
};
var serv = new MyPHPService();
serv.TheServiceMethodName( tmp ); // just pass the object you have created earlier. Or a dictionary, or other..