C # xml-rpc <dateTime.iso8601> - PullRequest
       13

C # xml-rpc <dateTime.iso8601>

1 голос
/ 01 декабря 2011

, поэтому я должен нажать веб-службу (xml-rpc), я использую библиотеку xml-rpc.net, чтобы сделать это.Один из параметров, которые я должен передать, должен иметь тип, которого в .net нет в качестве переменной.В настоящее время я просто пишу XML и публикую сообщения, это не вполне приемлемое решение.

Как выглядит XML для даты и времени:

</param>
<param>
  <value>
    <dateTime.iso8601>20101117T09:42:00</dateTime.iso8601>
  </value>
</param>
<param>

у кого-нибудь есть какие-нибудь умные идеи, кто-то сказалсоздайте переменную класса dateTime.iso8601 и используйте ее в качестве типа параметра.

1 Ответ

2 голосов
/ 31 декабря 2011

xml-rpc.net определенно принимает System.Datetime и преобразует в dateTime.iso8601. Гоча у меня была с различными интерпретациями dateTime.iso8601. Из вашего шаблона xml поддерживается вывод даты и времени (20101117T09: 42: 00), и у вас не будет такой же проблемы. У меня был очень строгий вышестоящий сервер, который нуждался в некотором смещении (например, +001), и мне пришлось расширить и передать формат datetime в xml-rpc.net.

Редактировать

Да, я изменил код, чтобы получить новый DateTimeFormat. Я скачал исходный код и внес следующие изменения (хотелось бы, чтобы он был лучше размещен, и можно было бы предложить модификацию).

Существует XmlRpcSerializer.cs, где происходит сериализация типа в формат xml-rpc. Метод, который вам нужен, естественно ...

void Serialize(
      XmlWriter xtw,
      Object o,
      MappingActions mappingActions,
      List<object> nestedObjs)

Где-то в этом методе есть проверка для XmlRpcType.tDateTime:

else if (xType == XmlRpcType.tDateTime)
        {
          DateTime dt = (DateTime)o;
          //The following line is what you need, if a custom DateTime format was supplied, to override the default
          string sdt = dt.ToString((string.IsNullOrEmpty(DateTimeFormat) ? "yyyyMMdd'T'HH':'mm':'ss" : DateTimeFormat),
          DateTimeFormatInfo.InvariantInfo);
          WriteFullElementString(xtw, "dateTime.iso8601", sdt);
        }

Остальная часть истории - о том, как передать пользовательский формат даты и времени в класс XmlRpcSerializer. Вы можете просто добавить свойство в этот класс, чтобы это произошло. Существует XmlRpcFormatSettings, который можно использовать, но это зависит от вас.

...