Чего я хочу добиться — это отправить в PHP сложный объект в PHP, используя в настоящее время WSD-данные но только отправляет значения свойств из корня, то есть:
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 — это класс с именем, идентификатором и т. Д., Но когда я публикую его, он отправляет только значение Author.toString (), я попытался добавить массив, подобный ключу, для отправки в 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 [‘Author’], не знаю, как этого добиться с помощью c #, если мне нужно внутренне изменить способ создания тела формы, просто дайте мне знать, но я хотел бы использовать данные формы, потому что он поддерживает подача файла.
С уважением
Похоже, что использование сериализации было бы лучшим вариантом, чем попытка обработать ваш ввод как данные формы. Я давно не делал много PHP, но я сделал много веб-сервисов. Просто сериализовать его на стороне Xamarin и десериализовать на стороне PHP.
Я нашел решение (был недостаток в библиотеке) его Вот
По сути, я рекурсивно сопоставляю сложный словарь с очень простым (один уровень со значениями). то есть
// 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