Есть 2 возможных BodyStyle
для запроса и ответа, завернутый или голый . Когда вы указываете упакованный стиль тела , служба WCF
ожидает, что будет передан действительный json, который в вашем случае будет
//note that property name is case sensitive and must match service parameter name
{
"jsonString": "some value"
}
И когда вы укажете bare отформатировать, что служба ожидает только обычное строковое значение (в случае типа примитива, как ваш) в качестве запроса, подобного этому
"some value"
Когда вы сериализуете свой объект следующим образом
dynamic foo = new ExpandoObject();
foo.position = 1;
string result = JsonConvert.SerializeObject(foo);
the [118 ] содержит следующий json
{
"position":1
}
, который соответствует формату в оболочке , и служба возвращает 400: Bad Request
. Все, что вам нужно сделать, это превратить этот json в действительное значение json string
, например,
"{\"position\":1}"
. Это можно сделать повторным вызовом JsonConvert.SerializeObject
dynamic foo = new ExpandoObject();
foo.position = 1;
string wrapped = JsonConvert.SerializeObject(foo);
string bare = JsonConvert.SerializeObject(wrapped);
var content = new StringContent(bare, System.Text.Encoding.UTF8, "application/json");
. Используйте LongCount (), то же самое, но с результатом на 64 бита.
Мое решение состояло в том, чтобы использовать .LongCount()
дополнительный метод.