直接回答您的问题,C# 中最接近的可能结构是 a Dictionary
,或者更确切地说,Dictionary<string, object>
$getOurRequest => array(
`aaaa`=> ‘1111’,
`bbbb`=> ‘2222’,
`ccccArray`=> array( ‘cccc3333’, ‘cccc4444‘ ),
`ddddArray`=>array( 'dddd5555','dddd6666' )
);
我其实不懂符号$getOurRequest => array(...);
。这里不应该是普通的 = 而不是 => 吗?
无论哪种方式,在 C# 中类似的变量声明将是:
var getOurRequest = new Dictionary<string, object>
{
{"aaaa", "1111"},
{"bbbb", "2222"},
{"ccccArray", new string[] { "cccc3333", "cccc4444" } },
{"ddddArray", new string[] { "dddd5555", "dddd6666" } }
);
但是,我认为这不会解决您发送 HTTP 请求的问题。为此,您将需要HttpWebRequest
对象,就像 Jensen 回答的那样,并且需要提供来自上面的 hashmap/array/dictionary 的所有“键”和“值”作为查询参数。
@SOAP:如果您可以为 发出 WSDL web service
,那么 VisualStudio/C#/svcutil 可以生成一系列代理类,这将大大简化对 Web 服务的调用。如果你能做到,请记下,我们会给你链接到如何做到这一点..或者只是在“C#调用网络服务”上搜索谷歌..
出于好奇 - 如果您不了解 C# 并且非常了解 PHP,为什么要询问 C# 代码?
编辑:
在评论中,您谈到了“对象参数”。在 PHP 或 JS 中,对象和键控数组之间有一点区别。在 C# 中,这是一个很大的区别,因为“字典”或任何其他哈希映射最有可能被序列化为“一系列键和值” - 而不是作为具有字段/键和值的对象。如果您确实需要传递“对象”,您实际上需要有一个类和对象实例。
//[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[] { "....", "...." }
};
只需确保取消注释“属性”之一 - 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 服务的调用只需要这两行!