我想将关联数组传递给json wcf服务。
因此,在JavaScript中,我与此类似:
var map = { };
map['a'] = 1;
map['b'] = 2;
map['c'] = 3;
在我的wcf服务中,我希望有一个字典:
[OperationContract][WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void setDictionary(Dictionary<string, int> myDictionary);
但是它将地图作为[Object object]发送而不是序列化,因为’map’实际上只是我为其分配属性的对象。
有谁知道我可以正确地序列化它以使其由WCF服务反序列化为Dictionary对象?
默认情况下,WCF不表示Dictionary
为JSON对象-
而是将它们表示为键/值对的数组。因此,要将该地图发送到WCF服务,您需要对其进行适当的隐藏(请参见下面的代码)。
另一种选择是使用自定义消息格式化程序,该消息格式化程序知道如何根据JSON对象填充字典。有关消息格式化程序的更多信息,请查看此博客文章。
这显示了将该对象传递给服务的一种方法:
Service.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="StackOverflow_15001755.Service"
CodeBehind="StackOverflow_15001755.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Service.svc.cs:
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace StackOverflow_15001755
{
[ServiceContract]
public class Service
{
static Dictionary<string, int> dictionary;
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void setDictionary(Dictionary<string, int> myDictionary)
{
dictionary = myDictionary;
}
[WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public Dictionary<string, int> getDictionary()
{
return dictionary;
}
}
}
Test.html(HTML / JS代码,使用jQuery进行ajax调用):
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="scripts/jquery-1.7.2.js"></script>
<script type="text/javascript" src="scripts/json2.js"></script>
</head>
<body>
<script type="text/javascript">
function StackOverflow_15001755_Test() {
function dictionaryToKVPArray(obj) {
var data = [];
for (var key in obj) {
data.push({ Key: key, Value: obj[key] });
}
return data;
}
function KVPArrayToDictionary(arr) {
var result = {};
arr.forEach(function (item) {
result[item.Key] = item.Value;
});
return result;
}
var map = {};
map['a'] = 1;
map['b'] = 2;
map['c'] = 3;
var data = dictionaryToKVPArray(map);
var baseUrl = "/StackOverflow_15001755.svc";
$.ajax({
type: 'POST',
url: baseUrl + '/setDictionary',
contentType: 'application/json',
data: JSON.stringify({ myDictionary: data }),
success: function (result) {
$('#result').text('Sent the dictionary');
$.ajax({
type: 'GET',
url: baseUrl + '/getDictionary',
success: function (result) {
var newMap = KVPArrayToDictionary(result);
$('#result2').text(JSON.stringify(newMap));
}
});
}
});
}
</script>
<input type="button" value="StackOverflow 15001755" onclick="StackOverflow_15001755_Test();" /><br />
<div id='result'></div><br />
<div id='result2'></div><br />
</body>
</html>
我的RestController中有如下API方法 类如下所示。 在postman中,我传递了一个JSON字符串,如 我得到一个错误说 2021-08-16 18:25:53.953警告4164---[io-8080-exec-10]. w. s. m. s.DefaultHandlerExceptionResolver:已解决[org.springframework.http.converter
使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段
问题内容: 我想将由Razor MVC帮助程序在我的登录表单中生成的RequestVerificationToken传递给我为管理应用程序身份验证而完成的AngularJS服务 我的形式如下: @ Html.AntiForgeryToken()以这种方式呈现: 我的AngujarJs控制器成功注入了我的“ loginService”,我可以通过Post发送用户名和密码到服务 服务: 我的问题是如何
是否有一种方法可以将封闭的对象引用作为参数传递给映射方法? 在自定义方法中映射person对象时,我需要一个对包围的car对象的引用。
我们有两个相关的下拉列表,其中一个下拉列表的结果与另一个下拉列表相关。 我们定义了一个映射,以映射的形式选择什么,如下所示; 根据上面的地图,当选择“DS”时,我们希望显示“Ärray”和“LL”。其他映射的情况也类似。 我将此映射传递给JSP,并使用JSTL呈现选项。在决定调用JS来填充后续下拉列表时,我想将其更改为JSON。 我想把选定选项的特定映射传递给JS方法,并填充后续的下拉列表。 转换
问题内容: 我在php中有对象,每个对象代表一个“项目”以及与之相关的所有信息。 当用户浏览页面时,这些对象应传递给javascript。理想情况下,镜像相同的结构,因此我可以使用Raphael在我的网站上将每个项目及其信息显示为单独的形状。 但是,如何将对象从php转换为javascript? 问题答案: 您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScrip