Я пытаюсь преобразовать свой проект на основе веб-API в Servicestack, и теперь у меня возникла проблема при преобразовании сложного (клиентского) графа объектов в динамический класс С# (поскольку он сложный и в основном используется на стороне клиента, я не хочу создавать представление этого C#). Вот какой-то урезанный код (не точный код, поэтому могут быть ошибки):
СТАРЫЙ КОД:
[HttpPost]
public HttpResponseMessage Save([FromBody] JObject jsonData)
{
dynamic jsonDataAsDynamic = jsonData;
var test = (JObject)jsonDataAsDynamic.TheComplexObjectGraphStringified;
}
Приведенный выше код работает без проблем.
НОВЫЙ КОД:
[Route("/SomeRoute/Save")]
public class PostRequest
{
public string A { get; set; }
public string B { get; set; }
public string TheComplexObjectGraphStringified { get; set; }
}
public object Post(PostRequest request)
{
var test = JsonObject.Parse(request.TheComplexObjectGraphStringified);
}
ПРИМЕЧАНИЕ. Поскольку я новичок в Servicestack, я (пока) не знаю, делает ли JsonObject.Parse то же самое, что и приведение к JObject.
Мой вызов Javascript:
$.ajax({
type: "POST",
url: <save url>,
data: '{' +
'"A":' + a +
',"B":' + b +
',"TheComplexObjectGraphStringified":' + JSON.stringify(TheComplexObjectGraph) +
'}',
contentType: "application/json",
dataType: "json",
Пример данных:
После применения stringify с javascript содержимое (НА КЛИЕНТЕ) «TheComplexObjectGraphStringified» (для вашего интереса это данные Google):
{"zoom":12,"tilt":0,"overlays":[{"uniqueid":1387287972247, "paths":[[{"lat":52.096898776519055,"lng":5.655044395378695},{"lat": 52.093607315804085,"lng":5.655044395378695}]]}],"center":{"lat":52.095253046161574,"lng":5.65941103165494}}
Теперь странно, когда это поступает на сервер в свойстве «TheComplexObjectGraphStringified», кавычки удаляются! Данные отладчика:
"{zoom:12,tilt:0,overlays: ‹...остальная часть строки...>"
Как видите, масштабирование больше не цитируется (я ожидаю что-то вроде "{\"zoom\": 12"
Я заметил, что если я добавлю несколько экранированных кавычек вручную с помощью отладчика JsonObject.Parse, похоже, это сработает.
Что я делаю не так?