【发布时间】:2023-03-05 22:34:01
【问题描述】:
给定以下对象
Friend Class GetLocationsResult
Public Property X1 As String
Public Property X2 As String
Public Property X3 As String
Public Property X4 As String
Public Property X5 As String
Public Property X6 As Double
Public Property X7 As Double
End Class
它是这样声明和实例化的:
Dim objList as List(of GetLocationsResults) = new List(of GetLocationsResults)
而 objList 是通过一个迭代器填充的,该迭代器通过对象/聚合类的集合搅动。迭代器只是将值推入一个新的 GetLocationsResult 对象,然后将其添加到列表中。
并给出 NewtonSoft JSONConvert.SerializeObject(objList) 结果:
{"d":"[{\"X1\":\"Store Name\",\"X2\":\"Address\",\"X3\":\"City\",\"X4\":\"State\",\"X5\":\"Zip\",\"X6\":Coord1,\"X7\":Coord2}]"}
这一点已得到解决,不再是问题
这个结果集有几个问题。首先,对于任何奇怪的 原因,被命名为
"d"的对象是不可接受的。
- 如何为 json 数组的“名称”指定
"d"以外的其他内容?
当我尝试JSON.parse 响应时,它需要采用以下格式才能实际获取数据:
resultSet = JSON.parse(data.d);
console.warn(resultSet[0].X1);
不得不说resultSet[0]当然是不可接受的。
- 如何使“JSONConvert.Serialize”方法不以必须引用第一个索引的方式包装响应 生成的 JSON 数据,以便我可以说
resultSet.X1而不是resultSet[0].X1?
根据要求,这里提供了一些可能与当前问题相关的更详细信息。
正在从 WCF 服务返回数据。暴露的方法是这样装饰的:
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json)>
并返回类型String。桌面应用程序和移动平台正在使用该服务。桌面网站可以有自己的方法,事实上,这样做是因为我们不想处理 X1、X2 等,而移动平台开发人员已声明这是必要的。如前所述,该方法以自定义聚合类的形式返回多个结果,然后将其推入一个类对象,该类对象只是一个属性的集合。因此返回语句是:
Return JsonConvert.SerializeObject(retVal)
其中 retVal 是一个 List(of GetLocationsResult)
因此,虽然必须通过索引访问数据对于网站来说可能很好,但对于移动平台来说是不可接受的。因为每个人都将运行自己的方法,所以如果需要,可以为两者提供一个独特的解决方案。
【问题讨论】:
-
发布 GetLocationsResultObject 对象。虽然可以从问题中推断出修复,但发布对象将有助于确认。
-
那将是最顶部的
Friend Class GetLocationsResult对象,第一个代码块。 :) -
{"d":"[...没有关闭] -
我已经更正了 json 括号、大括号和引号。感谢您指出这一点。
-
这并不奇怪或奇怪,只是现代的 json。该格式防止恶意执行,解释见this
标签: javascript jquery json vb.net json.net