Parsing 将Web API转换为Servicestack-JObject到JsonObject
我正在尝试将基于Web Api的项目转换为Servicestack,现在我在将复杂(客户端)对象图转换为C#动态类时遇到了问题(因为它很复杂,主要用于客户端,我不想创建C#表示)。下面是一些精简的代码(不是精确的代码,因此可能会有错误): 旧代码:Parsing 将Web API转换为Servicestack-JObject到JsonObject,parsing,dynamic,
servicestack,jsonobject,Parsing,Dynamic,
servicestack,Jsonobject,我正在尝试将基于Web Api的项目转换为Servicestack,现在我在将复杂(客户端)对象图转换为C#动态类时遇到了问题(因为它很复杂,主要用于客户端,我不想创建C#表示)。下面是一些精简的代码(不是精确的代码,因此可能会有错误): 旧代码: [HttpPost] public HttpResponseMessage Save([FromBody] JObject jsonData) { dynamic jsonDataAsDynamic = jsonData; var
[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是否与cast to JObject相同
我的Javascript调用是:
$.ajax({
type: "POST",
url: <save url>,
data: '{' +
'"A":' + a +
',"B":' + b +
',"TheComplexObjectGraphStringified":' + JSON.stringify(TheComplexObjectGraph) +
'}',
contentType: "application/json",
dataType: "json",
$.ajax({
类型:“POST”,
网址:,
数据:“{”+
“A”:“+A”+
“,“B”:“+B”+
“,“ComplexObjectGraphString”:“+JSON.stringify(ComplexObjectGraph)+
'}',
contentType:“应用程序/json”,
数据类型:“json”,
示例数据:
使用javascript应用stringify后,“ComplexObjectGraphStringify”的内容(在客户端上)是(出于您的兴趣,它是Google数据):
{“zoom”:12,“tilt”:0,“overlays”:[{“uniqueid”:138727972247,“Path”:[{“lat”:52.096898776519055,“lng”:5.655044395378695},{“lat”:52.09360731580485,“lng”:5.655044395378695}],“center:{“lat”:52.095253046161574,“lng”:5.65941105494}
现在奇怪的是,当它在属性“theComplexObjectGraphStringfied”中到达服务器时,引号被删除!调试器数据:
{缩放:12,倾斜:0,覆盖:
正如您所看到的,zoom不再被引用(我期待类似“{\“zoom\”:12”的内容
我注意到,如果我使用调试器JsonObject.Parse手动添加一些转义引号,似乎可以工作
我做错了什么?您的问题是因为您没有在数据到达ServiceStack服务器之前正确序列化数据
- 在您的代码中,您已经对复杂数据进行了字符串化,但是在将其发送到服务器之前,手动尝试构建对象周围的JSON数据
- 这种方法的问题在于,您没有逃脱复杂对象
$.ajax({
type: "POST",
url: <save url>,
data: JSON.stringify({
A: a,
B: b,
TheComplexObjectGraphStringified: JSON.stringify(TheComplexObjectGraph)
}),
contentType: "application/json",
dataType: "json",
...
$.ajax({
类型:“POST”,
网址:,
数据:JSON.stringify({
A:A,
B:B,
complexObjectGraphString:JSON.stringify(complexObjectGraph)
}),
contentType:“应用程序/json”,
数据类型:“json”,
...
我强烈建议您避免手动编写JSON字符串
我注意到,如果我使用调试器JsonObject.Parse手动添加一些转义引号,似乎可以工作
是的,没有理由给出有效代码,JsonObject.Parse
不起作用
我(还)不知道JsonObject.Parse是否与对JObject的转换相同
是的,它的行为类似。您可以看到的示例。其中的示例还包括谷歌地图数据示例。它可能很有用
希望这有帮助。非常感谢,考虑到我的非stringify解决方案,我觉得自己是新手。它现在可以工作了!提供的链接非常有用。