Мне нужно взаимодействовать с конечной точкой третьей стороны, которая принимает только форму, закодированную полезную нагрузку. Конечной хочет сложные типы данных в этой конечной точке, а это означает что-то вроде этого (но образуют закодированы, а не JSON):Как использовать FormUrlEncodedContent для сложных типов данных?
{
"foo": "bar",
"baz": {
"zip": "zap"
}
}
Мой прибегая к помощи и документы для конечной точки указывает на то, что это должно быть форма кодируется следующим образом:
foo=bar&baz[zip]=zap
Я использую HttpClient
и я хочу использовать FormUrlEncodedContent
но когда я делаю это заменой моей []
с уцелевшими символами.
public class Tests
{
[Fact]
public void Test()
{
var content = new Dictionary<String, String>
{
{ "foo", "bar" },
{ "baz[zip]", "zap" }
};
var formContent = new FormUrlEncodedContent(content);
Assert.Equal("foo=bar&baz[zip]=zap", formContent.ReadAsStringAsync().Result);
}
}
То, что я в конечном итоге вместо этого:
foo=bar&baz%5Bzip%5D=zap
Как я уже упоминал в моем вопросе, я взаимодействовать с третьей стороной api, поэтому я не могу выбрать формат сериализации. В их документах есть пример скручивания с помощью '-d bar [zip] = zap', и Google предлагает, что, хотя он не является стандартным, это самый распространенный механизм для отправки сложных форм объектов, закодированных (Я думаю, что jquery делает это так) Я согласен с тем, что api не должен этого делать, но тем не менее мне приходится иметь дело с этим. –
Как уже упоминалось в ответе, нет стандарта, и все основанный на конвенции. Нет. Функция .NET предоставит вам этот формат из коробки. Если ваша конечная точка документирует соглашение, которое она ожидает, вам нужно будет написать соответствующий сериализатор самостоятельно. – Tomalak
@ Мика Извините, что это не то, что вам хотелось бы услышать, однако это не меняет того факта, что ответ правильный. :) – Tomalak