2

我目前正在处理 ac#/php 项目,我需要从 c# 中的数据库中检索一些数据并将数据发送到数组并将数组发送到 php。

当我在数据库中循环时,我将字符串值添加到字符串列表数组中,一旦完成,我就会调用:

string[] myData = myList.toArray();

然后我尝试使用以下代码将 myData 发布到 php

Dictionary<string, string> report = new Dictionary<string, string>();
report.add("data", myData.toString());
    WebRequest request = WebRequest.Create(domain + appRoot + "/administrator/engine/email-alarms.php");
                    request.Method = "POST";
                    StringBuilder b = new StringBuilder();
                    foreach (KeyValuePair<string, string> data in report)
                    {
                        b.Append(HttpUtility.UrlEncode(data.Key)).Append("=").Append(HttpUtility.UrlEncode(data.Value ?? "")).Append("&");
                    }
                    string postData = b.ToString(0, b.Length - 1);
                    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = byteArray.Length;

                    Stream dataStream = request.GetRequestStream();
                    dataStream.Write(byteArray, 0, byteArray.Length);
                    dataStream.Close();

                    WebResponse response = request.GetResponse();
    Console.writeLine(response);

我意识到说 myData.toString() 不是正确的做法,因为它只是打印 System.String[] 但如果我不这样做,那么我会在 c# 代码中收到一个错误,指出存在无效参数。

如何将数组发布到 php?

感谢您的任何帮助,您可以提供。

4

4 回答 4

2

您始终可以将该json格式用作您的交换合同格式,并将其转换回其原生表示并相应地处理您的数据。c# 和 php 都有支持 json 格式的函数/库。

C# 序列化使用:

var postData=new JavascriptSerializer().Serialize(object);

在 PHP 中,您可以使用该json_decode()方法。我不确定它在 php 中是如何工作的。

希望这可以帮助。

于 2012-04-12T21:26:45.833 回答
2

更新:更改为甚至不需要List<string>. 您可以迭代原始数组。添加了 PHP 代码。

如果您希望$_POST["data"]在 PHP 脚本中是字符串数组,则无需序列化为 JSON 或其他格式。PHP 可以接受发布的数组就好了。你只需要以正确的方式去做。

改变这个:

Dictionary<string, string> report = new Dictionary<string, string>();
report.add("data", myData.toString());
// ...
foreach (KeyValuePair<string, string> data in report)
{
    b.Append(HttpUtility.UrlEncode(data.Key)).Append("=").Append(HttpUtility.UrlEncode(data.Value ?? "")).Append("&");
}

为此(您不再需要,List<string>因为您可以直接遍历您的数组并创建一个可发布的数组:

foreach (string data in myData)
{
    b.Append(HttpUtility.UrlEncode("data[]")).Append("=").Append(HttpUtility.UrlEncode(data ?? "")).Append("&");
}

这将导致data您的 POST 中的密钥来自:

string[] myData = new [] { "blah", "something", "else" };

发布如下:

data[]=blah&data[]=something&data[]=else

这将导致在 PHP 端成功创建数组(我希望如此)。

在 PHP 中,您应该可以这样做:

foreach ($_POST["data"] as $value)
{
    echo $value;
}
于 2012-04-12T21:31:19.300 回答
1

可能您最好的选择是将其编码为 JSON 使用JavaScriptSerializer,然后您可以使用 PHP 对其进行解码json_decode()

于 2012-04-12T21:27:00.993 回答
1

如果您只想序列化string[](不清楚,但我认为您想要的是,这是这里的真正问题),那么...

string.Join(",", myData) 

应该输出例如1, 2, 3...

于 2012-04-12T21:29:01.550 回答