Я работаю над приложением Silverlight 3, которое должно взаимодействовать с серверным приложением PHP 5.2.13.
Мы используем JSON.NET для завершения работы, но у меня возникли некоторые проблемы со словарями.
Я провожу несколько экспериментов и пытаюсь десериализовать объект, содержащий словарь:
public Dictionary<string, Block> Table
{
get { return m_table; }
set { m_table = value; }
}
C # сериализуется правильно, и я доволен этим, но на стороне PHP, при сериализации эквивалентного объекта с пустым Table
, он не будет работать.
$this->Table = array();
Проблема в том, что пустые массивы, очевидно, не считаются ассоциированным массивом, поэтому они экспортируются как []
вместо {}
.
Я думал добавить что-то вроде 'null' => null
в массив (принудительное связывание), а затем выполнить некоторую очистку в клиенте, но я не управляю объектами клиента C # и не могу ограничить их, чтобы они обнулялись. .. Я застрял на этом;)
Знаете ли вы какое-либо решение?
Спасибо за ваше время, очень ценится:)
РЕДАКТИРОВАТЬ: Чтобы уточнить, я не могу контролировать структуру обоих, C # и PHP объектов.
В моем тесте я создал объект, который содержит словарь, но объект дырки кодируется сразу.
Вот упрощенная версия:
class Block
{
public $X = 0;
public $Y = 0;
public $Name = '';
public $Children = array();
public $Table = array();
public $Nested = null;
}
Где Table
должен быть словарем и кодироваться как
echo json_encode( new Block() );