我正在尝试将基于 Web Api 的项目转换为 Servicestack,现在在将复杂(客户端)侧对象图转换为 C# 动态类时遇到问题(因为它很复杂并且主要用于客户端我不想创建对此的 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",
示例数据:
在使用 javascript 应用 stringify 后,“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 手动添加一些转义引号似乎可以工作。
我究竟做错了什么?