c # опубликовать сложный объект в php [Xamarin]

Чего я хочу добиться — это отправить в 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 #, если мне нужно внутренне изменить способ создания тела формы, просто дайте мне знать, но я хотел бы использовать данные формы, потому что он поддерживает подача файла.

С уважением

0

Решение

Похоже, что использование сериализации было бы лучшим вариантом, чем попытка обработать ваш ввод как данные формы. Я давно не делал много PHP, но я сделал много веб-сервисов. Просто сериализовать его на стороне Xamarin и десериализовать на стороне PHP.

0

Другие решения

Я нашел решение (был недостаток в библиотеке) его Вот

По сути, я рекурсивно сопоставляю сложный словарь с очень простым (один уровень со значениями). то есть

// 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
0

По вопросам рекламы [email protected]