Я пытаюсь редактировать события на страницах Facebook.
SDK работает нормально, но у меня есть одна проблема.
Всякий раз, когда в описании появляются новые строки (\ r \ n), они публикуются на Facebook.
Поэтому я получаю тела событий, такие как:
Новое событие! \ R \ nДобро пожаловать на событие.
вместо
Новое событие!
Добро пожаловать на мероприятие.
глядя на результат графика, попадающего на событие, я вижу, что символы новой строки дважды экранированы и выглядят так:
...
"name": "TEST EVENT",
"description": "Новое событие! \\ r \\ nДобро пожаловать в событие.",
"start_time": "2011-03-24T00: 00: 00"
...
Я перепробовал все возможные решения, но безрезультатно.
Я был сокращен до замены новых строк на "*" только для разделения предложений ...
Текст приходит в виде строки в объекте и передается в JsonObject.
JsonObject owner = new JsonObject { .... };
JsonObject evt = new JsonObject();
evt.Add("id", eventId);
evt.Add("owner", owner);
evt.Add("name", eventItem.Name);
evt.Add("updated_time", eventItem.Updated.ToString("o"));
evt.Add("description", eventItem.Description);
evt.Add("start_time", eventItem.StartDate.ToString("o"));
evt.Add("end_time", eventItem.EndDate.ToString("o"));
...
var fbc = new FacebookClient(internalObject.AccessToken);
result = (bool) fbc.Post(evt);
Есть идеи?
EDIT:
Обход.
Я внес изменения в FacebookUtils.ToJsonQueryString.
Это работает, но я думаю, что это может быть ошибка в SDK?
Похоже, Facebook не поддерживает стандартное экранирование Json от новых строк в событии?
internal static string ToJsonQueryString(IDictionary<string, object> dictionary)
{
...
jsonValue = jsonValue.Replace("\\n", "\n").Replace("\\r", "\r");
if (!String.IsNullOrEmpty(jsonValue))
{
var encodedValue = UrlEncode(jsonValue);
sb.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}", key, encodedValue);
...
return sb.ToString();
}
Это изменение делает \ r \ n в возвращенной строке запроса похожим на% 0d% 0a вместо% 5cr% 5cn, что и принимает Facebook.
Роянская