c#将复杂对象发布到php [Xamarin]

时间:2015-04-10 01:28:39

标签: c# php xamarin xamarin.ios dotnet-httpclient

我想要实现的是将PHP复杂对象发送到PHP,目前使用wsd-data但仅从根发送属性值,即:

public class Post : Collection<Post>
{
    public string Title { get; set; }
    public string Content { get; set; }
    public File Image { get; set; }
}

byte[] fileContents = ....;

Post post = new Post();
post.Title = "Post title";
post.Content = "Post content";
post.Image = new File ("FileName.png", "image/png", fileContents);
await post.Save();

在这种情况下可以正常工作,因为它在内部处理File案例,但是如果我添加嵌套依赖项,如

public class Post : Collection<Post>
{
    public string Title { get; set; }
    public string Content { get; set; }
    public File Image { get; set; }
    public Author Author { get; set; }
}

让我们说Author是一个有name,id等的类,但是当我发布它只发送Author.toString()值时,我试图添加一个像key一样的数组来发布给PHP,如:

MultipartFormDataContent form = new MultipartFormDataContent ();
form.Add (new StringContent (post.Author.Name), "Author[Name]");
form.Add (new StringContent (post.Author.Id), "Author[Id]");

await httpClient.PostAsync (url, form).ConfigureAwait (false);

然后在PHP中我希望收到这样的内容:

<?php
echo $_POST['Author']['Name']; // must print the author name
?>

但是我刚刚得到一个空的$ _POST [&#39;作者&#39;]变量,不知如何用c#实现,如果我需要在内部更改如何创建表单体只是让我知道,但是想要使用表单数据,因为它支持文件提交。

此致

2 个答案:

答案 0 :(得分:0)

使用序列化比尝试将输入作为表单数据处理更好。我还没有及时完成很多PHP,但我已经完成了大量的Web服务。只需在Xamarin端序列化它,然后在PHP端反序列化它。

答案 1 :(得分:0)

我找到了一个解决方案(这是图书馆的一个缺陷)here

基本上我将复杂字典递归地映射到一个非常简单的字典(带有值的一个级别)。即。

// Pseudo class with data
Post {
  Id=0,
  Title="Hello world",
  List<Comment> Comments=[
    Comment { Id=0, Description="This is a comment" }
  ]
}

// Pseudo dictionary result

Dictionary<string, string> data = {
  Id=0,
  Title="Hello World",
  Comments[0][Id]=0,
  Comments[0][Description]="This is a comment"
}

// And then in php get (all keys are converted to lowercase

echo $_POST['id']; // 0
echo $_POST['title']; // Hello World
echo $_POST['comments'][0]['id']; // 0
echo $_POST['comments'][0]['description']; // This is a comment