Если у вас дает исключение при сериализации какого либо класса, то стоит проверить, чтобы все публичные объекты в сериализируемом классе содержали в себе конструктор без параметров, и тогда все пойдет и будет гуд.
Пример:
[Serializable]
public class SpamedUsers
{
#region Parametres
public List<User> Users; // = new List<User>();
#endregion
. . .
[Serializable]
public class User
{
public string Name;
public DateTime LastSpamedTime;
public User (string name, DateTime lastspamedtime)
{
Name = name;
LastSpamedTime = lastspamedtime;
}
public User() // без этого конструктора сериализовать не получится объекты данного класса
{
}
Личный блог посвященный компьютерам, программированию, разработке сайтов, дизайну и информационной безопасности.
четверг, 19 мая 2011 г.
суббота, 14 мая 2011 г.
Drupal XmlRpc Date Api Services. Решение проблемы с глюками.
Немного помучившись с отправкой поля типа дата через xml-rpc на друпаловский сайт из программы на C# было найдено такое решение:
Все дело в том, что на Drupal сайте Date Api хранит дату немного не в том формате в котором отображает. Следовательно получение и отправка поля CCK типа Date будет сильно различаться.
То есть слать нужно структуру такого формата для поля с датой:
[field_next_call_date] => Array
(
[0] => Array
(
[value] => Array
(
[year] => 2014
[month] => 7
[day] => 7
)
)
)
И в таком формате для checkbox cck field.
[field_checkboxes] => Array
(
[value] => Array
(
[1991] => 1991
[1985] => 1985
)
1991 - это id термина таксономии связанного с чекбоксом
)
XmlRpcStruct node = new XmlRpcStruct();
string field_exclusive_date_to = "10.05.2024 0:00:00";
DateTime dtfield_exclusive_date_to = DateTime.Parse(field_exclusive_date_to);
AddArrayDateToNode("field_exclusive_date_to", dtfield_exclusive_date_to, node);
AddArrayDateToNode("field_exclusive_date_to", dtfield_exclusive_date_to, node);
/// <summary>
/// Добавляет в ноду поле с датой (Drupal Date)
/// </summary>
/// <param name="fieldname"></param>
/// <param name="dt"></param>
/// <param name="node"></param>
/// <remarks>Нужно написать в блоге каком то как это делать, ато все ебуться и никто еще не нашел.</remarks>
private static void AddArrayDateToNode(string fieldname, DateTime dt, XmlRpcStruct node)
{
XmlRpcStruct sMainDate = new XmlRpcStruct();
XmlRpcStruct sDate = new XmlRpcStruct();
sDate["year"] = dt.Year.ToString();
sDate["month"] = dt.Month.ToString();
sDate["day"] = dt.Day.ToString();
sMainDate["value"] = sDate;
object[] oDate = new object[] { sMainDate };
node[fieldname] = oDate;
}
/// Добавляет в ноду поле с датой (Drupal Date)
/// </summary>
/// <param name="fieldname"></param>
/// <param name="dt"></param>
/// <param name="node"></param>
/// <remarks>Нужно написать в блоге каком то как это делать, ато все ебуться и никто еще не нашел.</remarks>
private static void AddArrayDateToNode(string fieldname, DateTime dt, XmlRpcStruct node)
{
XmlRpcStruct sMainDate = new XmlRpcStruct();
XmlRpcStruct sDate = new XmlRpcStruct();
sDate["year"] = dt.Year.ToString();
sDate["month"] = dt.Month.ToString();
sDate["day"] = dt.Day.ToString();
sMainDate["value"] = sDate;
object[] oDate = new object[] { sMainDate };
node[fieldname] = oDate;
}
Все дело в том, что на Drupal сайте Date Api хранит дату немного не в том формате в котором отображает. Следовательно получение и отправка поля CCK типа Date будет сильно различаться.
То есть слать нужно структуру такого формата для поля с датой:
[field_next_call_date] => Array
(
[0] => Array
(
[value] => Array
(
[year] => 2014
[month] => 7
[day] => 7
)
)
)
И в таком формате для checkbox cck field.
[field_checkboxes] => Array
(
[value] => Array
(
[1991] => 1991
[1985] => 1985
)
1991 - это id термина таксономии связанного с чекбоксом
)
Подписаться на:
Сообщения (Atom)